Turn off CSE when creating Projs during double word lowering.
authorManuel Mohr <manuel.mohr@kit.edu>
Mon, 19 Sep 2011 09:30:34 +0000 (11:30 +0200)
committerManuel Mohr <manuel.mohr@kit.edu>
Mon, 19 Sep 2011 09:30:34 +0000 (11:30 +0200)
ir/lower/lower_dw.c

index 7dc3254..0f54d39 100644 (file)
@@ -1918,6 +1918,7 @@ static void lower_Start(ir_node *node, ir_mode *high_mode)
                ir_mode *mode_h;
                ir_node *res_low;
                ir_node *res_high;
+               int      old_cse;
                dbg_info *dbg;
 
                if (!is_Proj(proj))
@@ -1935,6 +1936,9 @@ static void lower_Start(ir_node *node, ir_mode *high_mode)
                        continue;
                }
 
+               /* Switch off CSE or we might get an already existing Proj. */
+               old_cse = get_opt_cse();
+               set_opt_cse(0);
                dbg = get_irn_dbg_info(proj);
                if (env->params->little_endian) {
                        res_low  = new_rd_Proj(dbg, pred, mode_l, new_projs[proj_nr]);
@@ -1943,6 +1947,7 @@ static void lower_Start(ir_node *node, ir_mode *high_mode)
                        res_high = new_rd_Proj(dbg, pred, mode_h, new_projs[proj_nr]);
                        res_low  = new_rd_Proj(dbg, pred, mode_l, new_projs[proj_nr] + 1);
                }
+               set_opt_cse(old_cse);
                ir_set_dw_lowered(proj, res_low, res_high);
        }
 }