+
+struct pass_t {
+ ir_prog_pass_t pass;
+ int force_run;
+ check_alloc_entity_func callback;
+};
+
+/**
+ * Wrapper for running optimize_funccalls() as an ir_prog pass.
+ */
+static int pass_wrapper(ir_prog *irp, void *context)
+{
+ struct pass_t *pass = context;
+
+ (void)irp;
+ optimize_funccalls(pass->force_run, pass->callback);
+ return 0;
+} /* pass_wrapper */
+
+/* Creates an ir_prog pass for optimize_funccalls. */
+ir_prog_pass_t *optimize_funccalls_pass(
+ const char *name,
+ int force_run, check_alloc_entity_func callback)
+{
+ struct pass_t *pass = XMALLOCZ(struct pass_t);
+
+ pass->force_run = force_run;
+ pass->callback = callback;
+
+ return def_prog_pass_constructor(
+ &pass->pass, name ? name : "funccall", pass_wrapper);
+} /* optimize_funccalls_pass */