Initial Version of pbqp coloring algorithm
[libfirm] / ir / opt / funccall.c
index 0f373f0..973b00e 100644 (file)
@@ -39,6 +39,7 @@
 #include "irloop_t.h"
 #include "ircons.h"
 #include "iredges_t.h"
+#include "irpass_t.h"
 #include "analyze_irg_args.h"
 #include "irhooks.h"
 #include "debug.h"
@@ -1073,3 +1074,35 @@ void optimize_funccalls(int force_run, check_alloc_entity_func callback)
 void firm_init_funccalls(void) {
        FIRM_DBG_REGISTER(dbg, "firm.opt.funccalls");
 }  /* firm_init_funccalls */
+
+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 */