avoid new_NoMem in favor or get_irg_no_mem
[libfirm] / ir / be / sparc / bearch_sparc.c
index 3adab36..499c71f 100644 (file)
@@ -117,6 +117,8 @@ static int sparc_get_sp_bias(const ir_node *node)
                 * calculates that! */
                assert(attr->immediate_value <= -SPARC_MIN_STACKSIZE);
                return attr->immediate_value + SPARC_MIN_STACKSIZE;
+       } else if (is_sparc_RestoreZero(node)) {
+               return SP_BIAS_RESET;
        }
        return 0;
 }
@@ -169,8 +171,8 @@ static void transform_Reload(ir_node *node)
 {
        ir_node   *block  = get_nodes_block(node);
        dbg_info  *dbgi   = get_irn_dbg_info(node);
-       ir_node   *ptr    = get_irn_n(node, be_pos_Spill_frame);
-       ir_node   *mem    = get_irn_n(node, be_pos_Reload_mem);
+       ir_node   *ptr    = get_irn_n(node, n_be_Spill_frame);
+       ir_node   *mem    = get_irn_n(node, n_be_Reload_mem);
        ir_mode   *mode   = get_irn_mode(node);
        ir_entity *entity = be_get_frame_entity(node);
        const arch_register_t *reg;
@@ -198,10 +200,10 @@ static void transform_Spill(ir_node *node)
 {
        ir_node   *block  = get_nodes_block(node);
        dbg_info  *dbgi   = get_irn_dbg_info(node);
-       ir_node   *ptr    = get_irn_n(node, be_pos_Spill_frame);
+       ir_node   *ptr    = get_irn_n(node, n_be_Spill_frame);
        ir_graph  *irg    = get_irn_irg(node);
-       ir_node   *mem    = new_r_NoMem(irg);
-       ir_node   *val    = get_irn_n(node, be_pos_Spill_val);
+       ir_node   *mem    = get_irg_no_mem(irg);
+       ir_node   *val    = get_irn_n(node, n_be_Spill_val);
        ir_mode   *mode   = get_irn_mode(val);
        ir_entity *entity = be_get_frame_entity(node);
        ir_node   *sched_point;
@@ -281,10 +283,12 @@ static void sparc_set_frame_entity(ir_node *node, ir_entity *entity)
 
 static void sparc_after_ra(ir_graph *irg)
 {
-       be_fec_env_t *fec_env = be_new_frame_entity_coalescer(irg);
+       be_stack_layout_t *stack_layout = be_get_irg_stack_layout(irg);
+       bool               at_begin     = stack_layout->sp_relative ? true : false;
+       be_fec_env_t      *fec_env      = be_new_frame_entity_coalescer(irg);
 
        irg_walk_graph(irg, NULL, sparc_collect_frame_entity_nodes, fec_env);
-       be_assign_entities(fec_env, sparc_set_frame_entity);
+       be_assign_entities(fec_env, sparc_set_frame_entity, at_begin);
        be_free_frame_entity_coalescer(fec_env);
 
        irg_block_walk_graph(irg, NULL, sparc_after_ra_walker, NULL);
@@ -306,7 +310,6 @@ static sparc_isa_t sparc_isa_template = {
                &sparc_registers[REG_SP],           /* stack pointer register */
                &sparc_registers[REG_FRAME_POINTER],/* base pointer register */
                &sparc_reg_classes[CLASS_sparc_gp], /* link pointer register class */
-               -1,                                 /* stack direction */
                3,                                  /* power of two stack alignment
                                                       for calls */
                NULL,                               /* main environment */
@@ -537,8 +540,7 @@ static ir_node *sparc_create_set(ir_node *cond)
 
 static void sparc_lower_for_target(void)
 {
-       int i;
-       int n_irgs = get_irp_n_irgs();
+       size_t i, n_irgs = get_irp_n_irgs();
        lower_mode_b_config_t lower_mode_b_config = {
                mode_Iu,
                sparc_create_set,