- fixed one Win32 "deprecated posix name" warning
[libfirm] / ir / be / bespillslots.c
index 43149be..e494adc 100644 (file)
@@ -127,12 +127,7 @@ static spill_t *collect_spill(be_fec_env_t *env, ir_node *node,
                                      const ir_mode *mode, int align)
 {
        spill_t spill, *res;
-       int     hash;
-
-       /* beware: although untypical there might be store nodes WITH Proj's,
-          vfisttp in ia32 for instance */
-       node = skip_Proj(node);
-       hash = hash_irn(node);
+       int     hash = hash_irn(node);
 
        /* insert into set of spills if not already there */
        spill.spill = node;
@@ -524,7 +519,10 @@ static ir_entity* create_stack_entity(be_fec_env_t *env, spill_slot_t *slot)
 {
        ir_graph *irg = be_get_birg_irg(env->birg);
        ir_type *frame = get_irg_frame_type(irg);
-       ir_entity *res = frame_alloc_area(frame, slot->size, slot->align, 0);
+       /* TODO: backend should be able to specify wether we want spill slots
+        * at begin or end of frame */
+       int        at_start = 1;
+       ir_entity *res = frame_alloc_area(frame, slot->size, slot->align, at_start);
 
        /* adjust size of the entity type... */
        ir_type *enttype = get_entity_type(res);
@@ -573,6 +571,8 @@ static void assign_spill_entity(const arch_env_t *arch_env, ir_node *node,
                return;
        }
 
+       /* beware: we might have Stores with Memory Proj's, ia32 fisttp for instance */
+       node = skip_Proj(node);
        assert(arch_get_frame_entity(arch_env, node) == NULL);
        arch_set_frame_entity(arch_env, node, entity);
 }
@@ -668,7 +668,7 @@ static void assign_spillslots(be_fec_env_t *env)
 
        for(i = 0; i < ARR_LEN(env->reloads); ++i) {
                ir_node            *reload    = env->reloads[i];
-               ir_node            *spillnode = skip_Proj(get_memory_edge(reload));
+               ir_node            *spillnode = get_memory_edge(reload);
                spill_t            *spill     = get_spill(env, spillnode);
                const spill_slot_t *slot      = & spillslots[spill->spillslot];
 
@@ -766,7 +766,7 @@ static int count_spillslots(const be_fec_env_t *env)
 
 be_fec_env_t *be_new_frame_entity_coalescer(be_irg_t *birg)
 {
-       const arch_env_t *arch_env = &birg->main_env->arch_env;
+       const arch_env_t *arch_env = birg->main_env->arch_env;
        be_fec_env_t     *env      = xmalloc(sizeof(env[0]));
 
        be_liveness_assure_chk(be_assure_liveness(birg));
@@ -829,7 +829,7 @@ static void collect_spills_walker(ir_node *node, void *data)
 
        mode  = get_irn_mode(node);
        cls   = arch_get_irn_reg_class(arch_env, node, -1);
-       align = arch_isa_get_reg_class_alignment(arch_env_get_isa(arch_env), cls);
+       align = arch_env_get_reg_class_alignment(arch_env, cls);
 
        be_node_needs_frame_entity(env, node, mode, align);
 }