bearch: Dump the output requirement and the assigned register in the same line for...
[libfirm] / ir / be / beabihelper.c
index 102ae3a..75ca7e8 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "beabihelper.h"
 #include "bearch.h"
+#include "beirg.h"
 #include "benode.h"
 #include "besched.h"
 #include "ircons.h"
@@ -383,7 +384,6 @@ ir_node *be_epilog_create_return(beabi_helper_env_t *env, dbg_info *dbgi,
  */
 static bool has_real_user(const ir_node *node)
 {
-       const ir_edge_t *edge;
        foreach_out_edge(node, edge) {
                ir_node *user = get_edge_src_irn(edge);
                if (!is_End(user) && !is_Anchor(user))
@@ -413,12 +413,9 @@ static ir_node *add_to_keep(ir_node *last_keep,
 
 void be_add_missing_keeps_node(ir_node *node)
 {
-       int              n_outs, i;
-       unsigned        *found_projs;
-       const ir_edge_t *edge;
-       ir_mode         *mode = get_irn_mode(node);
-       ir_node         *last_keep;
-       ir_node        **existing_projs;
+       int       n_outs, i;
+       ir_mode  *mode = get_irn_mode(node);
+       ir_node  *last_keep;
 
        if (mode != mode_T) {
                if (!has_real_user(node)) {
@@ -438,8 +435,8 @@ void be_add_missing_keeps_node(ir_node *node)
        if (n_outs <= 0)
                return;
 
-       rbitset_alloca(found_projs, n_outs);
-       existing_projs = ALLOCANZ(ir_node*, n_outs);
+       unsigned *const found_projs    = rbitset_alloca(n_outs);
+       ir_node **const existing_projs = ALLOCANZ(ir_node*, n_outs);
        foreach_out_edge(node, edge) {
                ir_node *succ = get_edge_src_irn(edge);
                ir_mode *mode = get_irn_mode(succ);
@@ -665,7 +662,7 @@ be_stackorder_t *be_collect_stacknodes(ir_graph *irg)
 
 ir_node *be_get_stack_pred(const be_stackorder_t *env, const ir_node *node)
 {
-       return (ir_node*)ir_nodemap_get(&env->stack_order, node);
+       return ir_nodemap_get(ir_node, &env->stack_order, node);
 }
 
 void be_free_stackorder(be_stackorder_t *env)
@@ -717,7 +714,7 @@ static void create_stores_for_type(ir_graph *irg, ir_type *type)
                                first_store = store0;
                } else {
                        ir_type *tp    = get_entity_type(entity);
-                       ir_mode *mode  = get_type_mode(tp);
+                       ir_mode *mode  = is_compound_type(tp) ? mode_P : get_type_mode(tp);
                        ir_node *val   = new_r_Proj(args, mode, arg);
                        ir_node *store = new_r_Store(start_block, mem, addr, val, cons_none);
                        mem = new_r_Proj(store, mode_M, pn_Store_M);
@@ -726,10 +723,8 @@ static void create_stores_for_type(ir_graph *irg, ir_type *type)
                }
        }
 
-       if (mem != initial_mem) {
-               edges_reroute(initial_mem, mem);
-               set_Store_mem(first_store, initial_mem);
-       }
+       if (mem != initial_mem)
+               edges_reroute_except(initial_mem, mem, first_store);
 }
 
 void be_add_parameter_entity_stores(ir_graph *irg)