Rework Block labels: They are entities now so we don't need a special symconst type...
[libfirm] / ir / lower / lower_mode_b.c
index 47a404b..a6c0f75 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "irnode_t.h"
 #include "ircons_t.h"
+#include "irflag.h"
 #include "irgwalk.h"
 #include "irtools.h"
 #include "iredges.h"
@@ -85,7 +86,7 @@ static ir_node *create_convb(ir_node *node)
 {
        ir_graph *irg   = current_ir_graph;
        ir_node  *block = get_nodes_block(node);
-       ir_node  *conv  = new_rd_Conv(NULL, irg, block, node, mode_b, 0);
+       ir_node  *conv  = new_rd_Conv(NULL, irg, block, node, mode_b);
 
        return conv;
 }
@@ -116,7 +117,7 @@ static ir_node *create_set(ir_node *node)
        ir_node *set      = new_rd_Mux(dbgi, irg, block, node, zero, one, mode);
 
        if (mode != config.lowered_mode) {
-               set = new_r_Conv(irg, block, set, config.lowered_mode, 0);
+               set = new_r_Conv(irg, block, set, config.lowered_mode);
        }
 
        return set;
@@ -291,8 +292,8 @@ static ir_node *lower_node(ir_node *node)
                                        ir_node *shift_cnt = new_d_Const(dbgi, tv);
 
                                        if(cmp_mode != mode) {
-                                               a = new_rd_Conv(dbgi, irg, block, a, mode, 0);
-                                               b = new_rd_Conv(dbgi, irg, block, b, mode, 0);
+                                               a = new_rd_Conv(dbgi, irg, block, a, mode);
+                                               b = new_rd_Conv(dbgi, irg, block, b, mode);
                                        }
 
                                        res = new_rd_Sub(dbgi, irg, block, a, b, mode);
@@ -404,8 +405,12 @@ void ir_lower_mode_b(ir_graph *irg, const lower_mode_b_config_t *nconfig)
        config        = *nconfig;
        lowered_nodes = new_pdeq();
 
+       /* ensure no optimisation touches muxes anymore */
+       set_irg_state(irg, IR_GRAPH_STATE_KEEP_MUX);
+
        ir_reserve_resources(irg, IR_RESOURCE_IRN_LINK);
 
+       set_opt_allow_conv_b(0);
        irg_walk_graph(irg, clear_links, NULL, NULL);
        irg_walk_graph(irg, lower_mode_b_walker, NULL, NULL);