X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Freassoc.c;h=07e96ccfdc1e7c333ee378208817387cac7c9cd5;hb=52d1c7c57180cdb6aa12be48a1d41a961dc85174;hp=8bba618986d66b9086be23e35aa84a30c0eeeb43;hpb=4b734653b3f11a3182963369bb58980e4d5a62cb;p=libfirm diff --git a/ir/opt/reassoc.c b/ir/opt/reassoc.c index 8bba61898..07e96ccfd 100644 --- a/ir/opt/reassoc.c +++ b/ir/opt/reassoc.c @@ -36,10 +36,12 @@ #include "irgwalk.h" #include "irouts.h" #include "reassoc_t.h" +#include "opt_init.h" #include "irhooks.h" #include "irloop.h" #include "pdeq.h" #include "debug.h" +#include "irpass.h" //#define NEW_REASSOC @@ -171,8 +173,8 @@ static int reassoc_Sub(ir_node **in) dbi = get_irn_dbg_info(n); /* Beware of SubP(P, Is) */ - irn = new_rd_Minus(dbi, current_ir_graph, block, right, rmode); - irn = new_rd_Add(dbi, current_ir_graph, block, left, irn, mode); + irn = new_rd_Minus(dbi, block, right, rmode); + irn = new_rd_Add(dbi, block, left, irn, mode); DBG((dbg, LEVEL_5, "Applied: %n - %n => %n + (-%n)\n", get_Sub_left(n), right, get_Sub_left(n), right)); @@ -266,15 +268,15 @@ static int reassoc_commutative(ir_node **node) if (mode_is_int(mode_c1) && mode_is_int(mode_c2)) { /* get the bigger one */ if (get_mode_size_bits(mode_c1) > get_mode_size_bits(mode_c2)) - c2 = new_r_Conv(current_ir_graph, block, c2, mode_c1); + c2 = new_r_Conv(block, c2, mode_c1); else if (get_mode_size_bits(mode_c1) < get_mode_size_bits(mode_c2)) - c1 = new_r_Conv(current_ir_graph, block, c1, mode_c2); + c1 = new_r_Conv(block, c1, mode_c2); else { /* Try to cast the real const */ if (c_c1 == REAL_CONSTANT) - c1 = new_r_Conv(current_ir_graph, block, c1, mode_c2); + c1 = new_r_Conv(block, c1, mode_c2); else - c2 = new_r_Conv(current_ir_graph, block, c2, mode_c1); + c2 = new_r_Conv(block, c2, mode_c1); } } } @@ -467,8 +469,8 @@ static int reassoc_Mul(ir_node **node) /* we can only multiplication rules on integer arithmetic */ if (mode_is_int(get_irn_mode(t1)) && mode_is_int(get_irn_mode(t2))) { - in[0] = new_rd_Mul(NULL, current_ir_graph, block, c, t1, mode); - in[1] = new_rd_Mul(NULL, current_ir_graph, block, c, t2, mode); + in[0] = new_rd_Mul(NULL, block, c, t1, mode); + in[1] = new_rd_Mul(NULL, block, c, t2, mode); irn = optimize_node(new_ir_node(NULL, current_ir_graph, block, op, mode, 2, in)); @@ -518,7 +520,7 @@ static int reassoc_Shl(ir_node **node) { blk = get_nodes_block(n); c = new_Const(tv); - irn = new_rd_Mul(get_irn_dbg_info(n), current_ir_graph, blk, x, c, mode); + irn = new_rd_Mul(get_irn_dbg_info(n), blk, x, c, mode); if (irn != n) { exchange(n, irn); @@ -725,16 +727,16 @@ transform: mode = get_irn_mode(n); if (is_Add(n)) - irn = new_rd_Add(dbg, current_ir_graph, blk, a, b, mode); + irn = new_rd_Add(dbg, blk, a, b, mode); else - irn = new_rd_Sub(dbg, current_ir_graph, blk, a, b, mode); + irn = new_rd_Sub(dbg, blk, a, b, mode); blk = earliest_block(irn, x, curr_blk); if (op == op_Mul) - irn = new_rd_Mul(dbg, current_ir_graph, blk, irn, x, mode); + irn = new_rd_Mul(dbg, blk, irn, x, mode); else - irn = new_rd_Shl(dbg, current_ir_graph, blk, irn, x, mode); + irn = new_rd_Shl(dbg, blk, irn, x, mode); exchange(n, irn); *node = irn; @@ -932,6 +934,11 @@ int optimize_reassociation(ir_graph *irg) return env.changes; } /* optimize_reassociation */ +/* create a pass for the reassociation */ +ir_graph_pass_t *optimize_reassociation_pass(const char *name) { + return def_graph_pass_ret(name ? name : "reassoc", optimize_reassociation); +} /* optimize_reassociation_pass */ + /* Sets the default reassociation operation for an ir_op_ops. */ ir_op_ops *firm_set_default_reassoc(ir_opcode code, ir_op_ops *ops) {