- connect function call argument stores to NoMem instead of call Mem
authorMatthias Braun <matze@braunis.de>
Thu, 31 Aug 2006 11:40:15 +0000 (11:40 +0000)
committerMatthias Braun <matze@braunis.de>
Thu, 31 Aug 2006 11:40:15 +0000 (11:40 +0000)
- warning fixes

ir/be/beabi.c
ir/be/bemain.c
ir/be/mips/mips_scheduler.c
ir/be/mips/mips_scheduler.h

index e4c0bea..34e3f29 100644 (file)
@@ -478,6 +478,13 @@ static ir_node *adjust_call(be_abi_irg_t *env, ir_node *irn, ir_node *curr_sp, i
                        }
                }
 
+               if(!do_seq) {
+                       obstack_ptr_grow(obst, get_Call_mem(irn));
+                       curr_mem = new_NoMem();
+               } else {
+                       curr_mem = get_Call_mem(irn);
+               }
+
                assert(mode_is_reference(mach_mode) && "machine mode must be pointer");
                for(i = 0; i < n_pos; ++i) {
                        int p                  = pos[i];
@@ -515,15 +522,18 @@ static ir_node *adjust_call(be_abi_irg_t *env, ir_node *irn, ir_node *curr_sp, i
 
                        /* Insert a store for primitive arguments. */
                        if (is_atomic_type(param_type)) {
-                               mem = new_r_Store(irg, bl, curr_mem, addr, param);
-                               mem = new_r_Proj(irg, bl, mem, mode_M, pn_Store_M);
+                               ir_node *store;
+                               store = new_r_Store(irg, bl, curr_mem, addr, param);
+                               mem = new_r_Proj(irg, bl, store, mode_M, pn_Store_M);
                        }
 
                        /* Make a mem copy for compound arguments. */
                        else {
+                               ir_node *copy;
+
                                assert(mode_is_reference(get_irn_mode(param)));
-                               mem = new_r_CopyB(irg, bl, curr_mem, addr, param, param_type);
-                               mem = new_r_Proj(irg, bl, mem, mode_M, pn_CopyB_M_regular);
+                               copy = new_r_CopyB(irg, bl, curr_mem, addr, param, param_type);
+                               mem = new_r_Proj(irg, bl, copy, mode_M, pn_CopyB_M_regular);
                        }
 
                        curr_ofs += param_size;
@@ -537,8 +547,13 @@ static ir_node *adjust_call(be_abi_irg_t *env, ir_node *irn, ir_node *curr_sp, i
                in = (ir_node **) obstack_finish(obst);
 
                /* We need the sync only, if we didn't build the stores sequentially. */
-               if(!do_seq)
-                       curr_mem = new_r_Sync(irg, bl, n_pos, in);
+               if(!do_seq) {
+                       if(n_pos >= 1) {
+                               curr_mem = new_r_Sync(irg, bl, n_pos + 1, in);
+                       } else {
+                               curr_mem = get_Call_mem(irn);
+                       }
+               }
                obstack_free(obst, in);
        }
 
index 83a01b2..05ef2ca 100644 (file)
@@ -717,7 +717,7 @@ int be_put_ignore_regs(const be_irg_t *birg, const arch_register_class_t *cls, b
        else
                bitset_clear_all(bs);
 
-       assert(bitset_size(bs) == cls->n_regs);
+       assert(bitset_size(bs) == (unsigned) cls->n_regs);
        arch_put_non_ignore_regs(birg->main_env->arch_env, cls, bs);
        bitset_flip_all(bs);
        be_abi_put_ignore_regs(birg->abi, cls, bs);
index 9997419..ba9ce21 100644 (file)
@@ -177,8 +177,9 @@ static ir_node *mips_scheduler_select(void *block_env, nodeset *ready_set)
 /**
  * Returns the reg_pressure scheduler with to_appear_in_schedule() overloaded
  */
-const list_sched_selector_t *mips_get_list_sched_selector(const void *self)
+const list_sched_selector_t *mips_get_list_sched_selector(const void *self, list_sched_selector_t *selector)
 {
+#if 0
        memset(&mips_sched_selector, 0, sizeof(mips_sched_selector));
        mips_sched_selector.init_graph = mips_scheduler_init_graph;
        mips_sched_selector.init_block = mips_scheduler_init_block;
@@ -187,4 +188,6 @@ const list_sched_selector_t *mips_get_list_sched_selector(const void *self)
        mips_sched_selector.finish_block = mips_scheduler_finish_block;
        mips_sched_selector.finish_graph = mips_scheduler_finish_graph;
        return &mips_sched_selector;
+#endif
+       return selector;
 }
index e16a83b..c3de748 100644 (file)
@@ -1,8 +1,15 @@
 #ifndef _MIPS_SCHEDULER_H_
+
 #define _MIPS_SCHEDULER_H_
 
+
+
 #include "../besched_t.h"
 
-const list_sched_selector_t *mips_get_list_sched_selector(const void *self);
+
+
+const list_sched_selector_t *mips_get_list_sched_selector(const void *self, list_sched_selector_t *selector);
+
+
 
 #endif