Remove the very thin wrapper function arch_register_get_name().
[libfirm] / ir / be / sparc / sparc_stackframe.c
index ce542b3..23283f4 100644 (file)
@@ -50,9 +50,6 @@ static void set_irn_sp_bias(ir_node *node, int new_bias)
 static void process_bias(ir_node *block, bool sp_relative, int bias,
                          int free_bytes)
 {
-       const ir_edge_t *edge;
-       ir_node         *irn;
-
        mark_Block_block_visited(block);
 
        /* process schedule */
@@ -68,6 +65,14 @@ static void process_bias(ir_node *block, bool sp_relative, int bias,
                        arch_set_frame_offset(irn, offset);
                }
 
+               /* The additional alignment bytes cannot be used
+                * anymore after alloca. */
+               if (is_sparc_SubSP(irn)) {
+                       free_bytes = 0;
+               } else if (is_sparc_AddSP(irn)) {
+                       assert(free_bytes == 0);
+               }
+
                irn_bias = arch_get_sp_bias(irn);
                if (irn_bias == 0) {
                        /* do nothing */
@@ -280,7 +285,7 @@ void sparc_create_stacklayout(ir_graph *irg, calling_convention_t *cconv)
 /* Assign entity offsets, to all stack-related entities.
  * The offsets are relative to the begin of the stack frame.
  */
-static void process_frame_types(ir_graph *irg)
+void sparc_adjust_stack_entity_offsets(ir_graph *irg)
 {
        be_stack_layout_t *layout = be_get_irg_stack_layout(irg);
 
@@ -324,6 +329,7 @@ static void process_frame_types(ir_graph *irg)
                unsigned misalign = (SPARC_MIN_STACKSIZE+frame_size) % frame_align;
                frame_size += misalign;
        }
+       set_type_size_bytes(frame_type, frame_size);
 
        ir_type *arg_type = layout->arg_type;
 
@@ -338,8 +344,6 @@ void sparc_fix_stack_bias(ir_graph *irg)
 
        ir_node *start_block = get_irg_start_block(irg);
 
-       process_frame_types(irg);
-
        ir_reserve_resources(irg, IR_RESOURCE_BLOCK_VISITED);
        inc_irg_block_visited(irg);
        process_bias(start_block, sp_relative, 0, 0);