void opt_sync(ir_graph *irg);
+/**
+ * Creates an ir_graph pass for opt_sync().
+ *
+ * @param name the name of this pass or NULL
+ * @param verify should this pass be verified?
+ * @param dump should this pass result be dumped?
+ *
+ * @return the newly created ir_graph pass
+ */
+ir_graph_pass_t *opt_sync_pass(const char *name, int verify, int dump);
+
/*
* Check if we can replace the load by a given const from
* the const code irg.
*/
int optimize_load_store(ir_graph *irg);
+/**
+ * Creates an ir_graph pass for optimize_load_store().
+ *
+ * @param name the name of this pass or NULL
+ * @param verify should this pass be verified?
+ * @param dump should this pass result be dumped?
+ *
+ * @return the newly created ir_graph pass
+ */
+ir_graph_pass_t *optimize_load_store_pass(const char *name, int verify, int dump);
+
/**
* New experimental alternative to optimize_load_store.
* Based on a dataflow analysis, so load/stores are moved out of loops
*/
int opt_ldst(ir_graph *irg);
+/**
+ * Creates an ir_graph pass for opt_ldst().
+ *
+ * @param name the name of this pass or NULL
+ * @param verify should this pass be verified?
+ * @param dump should this pass result be dumped?
+ *
+ * @return the newly created ir_graph pass
+ */
+ir_graph_pass_t *opt_ldst_pass(const char *name, int verify, int dump);
+
/**
* Do Loop unrolling in the given graph.
*/
void optimize_loop_unrolling(ir_graph *irg);
+/**
+ * Creates an ir_graph pass for optimize_loop_unrolling().
+ *
+ * @param name the name of this pass or NULL
+ * @param verify should this pass be verified?
+ * @param dump should this pass result be dumped?
+ *
+ * @return the newly created ir_graph pass
+ */
+ir_graph_pass_t *optimize_loop_unrolling_pass(const char *name, int verify, int dump);
+
/**
* Optimize the frame type of an irg by removing
* never touched entities.
*/
void opt_frame_irg(ir_graph *irg);
+/**
+ * Creates an ir_graph pass for opt_frame_irg().
+ *
+ * @param name the name of this pass or NULL
+ * @param verify should this pass be verified?
+ * @param dump should this pass result be dumped?
+ *
+ * @return the newly created ir_graph pass
+ */
+ir_graph_pass_t *opt_frame_irg_pass(const char *name, int verify, int dump);
+
/** Possible flags for the Operator Scalar Replacement. */
typedef enum osr_flags {
osr_flag_none = 0, /**< no additional flags */
*/
void opt_osr(ir_graph *irg, unsigned flags);
+/**
+ * Creates an ir_graph pass for remove_phi_cycles().
+ *
+ * @param name the name of this pass or NULL
+ * @param verify should this pass be verified?
+ * @param dump should this pass result be dumped?
+ * @param flags set of osr_flags
+ *
+ * @return the newly created ir_graph pass
+ */
+ir_graph_pass_t *opt_osr_pass(const char *name, int verify, int dump, unsigned flags);
+
/**
* Removes useless Phi cycles, i.e cycles of Phi nodes with only one
* non-Phi node.
*/
void remove_phi_cycles(ir_graph *irg);
+/**
+ * Creates an ir_graph pass for remove_phi_cycles().
+ *
+ * @param name the name of this pass or NULL
+ * @param verify should this pass be verified?
+ * @param dump should this pass result be dumped?
+ * @param params The parameters for the if conversion.
+ *
+ * @return the newly created ir_graph pass
+ */
+ir_graph_pass_t *remove_phi_cycles_pass(const char *name, int verify, int dump);
+
+
/** A default threshold. */
#define DEFAULT_CLONE_THRESHOLD 300
#include "array.h"
#include "firmstat.h"
#include "error.h"
+#include "irpass_t.h"
/** The debug handle. */
DEBUG_ONLY(static firm_dbg_module_t *dbg;)
current_ir_graph = rem;
} /* remove_phi_cycles */
+ir_graph_pass_t *remove_phi_cycles_pass(const char *name, int verify, int dump)
+{
+ return def_graph_pass(name ? name : "remove_phi_cycles", verify, dump, remove_phi_cycles);
+} /* remove_phi_cycles_pass */
+
/**
* Post-walker: fix Add and Sub nodes that where results of I<->P conversions.
*/
current_ir_graph = rem;
} /* opt_osr */
+
+struct pass_t {
+ ir_graph_pass_t pass;
+ unsigned flags;
+};
+
+/**
+* Wrapper for running opt_osr() as an ir_graph pass.
+*/
+static int pass_wrapper(ir_graph *irg, void *context) {
+ struct pass_t *pass = context;
+ opt_osr(irg, pass->flags);
+ return 0;
+} /* pass_wrapper */
+
+ir_graph_pass_t *opt_osr_pass(const char *name, int verify, int dump, unsigned flags)
+{
+ struct pass_t *pass = xmalloc(sizeof(*pass));
+
+ pass->pass.kind = k_ir_prog_pass;
+ pass->pass.run_on_irg = pass_wrapper;
+ pass->pass.context = pass;
+ pass->pass.name = name ? name : "osr";
+ pass->pass.verify = verify != 0;
+ pass->pass.dump = dump != 0;
+
+ pass->flags = flags;
+
+ INIT_LIST_HEAD(&pass->pass.list);
+
+ return &pass->pass;
+} /* opt_osr_pass */