get_Call_n_params: use int for consistency
[libfirm] / ir / be / sparc / sparc_transform.c
index 310f575..4f6c92b 100644 (file)
@@ -663,7 +663,7 @@ static ir_node *gen_Proj_AddCC_t(ir_node *node)
        case pn_sparc_AddCC_t_flags:
                return new_r_Proj(new_pred, mode_flags, pn_sparc_AddCC_flags);
        default:
-               panic("Invalid AddCC_t proj found");
+               panic("Invalid proj found");
        }
 }
 
@@ -710,7 +710,7 @@ static ir_node *gen_Proj_SubCC_t(ir_node *node)
        case pn_sparc_SubCC_t_flags:
                return new_r_Proj(new_pred, mode_flags, pn_sparc_SubCC_flags);
        default:
-               panic("Invalid SubCC_t proj found");
+               panic("Invalid proj found");
        }
 }
 
@@ -777,7 +777,7 @@ static ir_node *gen_Load(ir_node *node)
        address_t address;
 
        if (get_Load_unaligned(node) == align_non_aligned) {
-               panic("sparc: transformation of unaligned Loads not implemented yet");
+               panic("transformation of unaligned Loads not implemented yet");
        }
 
        if (mode_is_float(mode)) {
@@ -820,7 +820,7 @@ static ir_node *gen_Store(ir_node *node)
        address_t address;
 
        if (get_Store_unaligned(node) == align_non_aligned) {
-               panic("sparc: transformation of unaligned Stores not implemented yet");
+               panic("transformation of unaligned Stores not implemented yet");
        }
 
        if (mode_is_float(mode)) {
@@ -1054,7 +1054,7 @@ static ir_node *gen_Shl(ir_node *node)
 {
        ir_mode *mode = get_irn_mode(node);
        if (get_mode_modulo_shift(mode) != 32)
-               panic("modulo_shift!=32 not supported by sparc backend");
+               panic("modulo_shift!=32 not supported");
        return gen_helper_binop(node, MATCH_NONE, new_bd_sparc_Sll_reg, new_bd_sparc_Sll_imm);
 }
 
@@ -1062,7 +1062,7 @@ static ir_node *gen_Shr(ir_node *node)
 {
        ir_mode *mode = get_irn_mode(node);
        if (get_mode_modulo_shift(mode) != 32)
-               panic("modulo_shift!=32 not supported by sparc backend");
+               panic("modulo_shift!=32 not supported");
        return gen_helper_binop(node, MATCH_NONE, new_bd_sparc_Srl_reg, new_bd_sparc_Srl_imm);
 }
 
@@ -1070,7 +1070,7 @@ static ir_node *gen_Shrs(ir_node *node)
 {
        ir_mode *mode = get_irn_mode(node);
        if (get_mode_modulo_shift(mode) != 32)
-               panic("modulo_shift!=32 not supported by sparc backend");
+               panic("modulo_shift!=32 not supported");
        return gen_helper_binop(node, MATCH_NONE, new_bd_sparc_Sra_reg, new_bd_sparc_Sra_imm);
 }
 
@@ -1105,7 +1105,7 @@ static ir_entity *create_float_const_entity(ir_tarval *tv)
 {
        const arch_env_t *arch_env = be_get_irg_arch_env(current_ir_graph);
        sparc_isa_t      *isa      = (sparc_isa_t*) arch_env;
-       ir_entity        *entity   = (ir_entity*) pmap_get(isa->constants, tv);
+       ir_entity        *entity   = pmap_get(ir_entity, isa->constants, tv);
        ir_initializer_t *initializer;
        ir_mode          *mode;
        ir_type          *type;
@@ -1171,8 +1171,9 @@ static ir_node *gen_Const(ir_node *node)
        if (mode_is_float(mode)) {
                return gen_float_const(dbgi, block, tv);
        }
+
+       assert(get_mode_size_bits(get_tarval_mode(tv)) <= 32);
        val = (int32_t)get_tarval_long(tv);
-       assert((long)val == get_tarval_long(tv));
        return create_int_const(block, val);
 }
 
@@ -1436,7 +1437,7 @@ static ir_node *gen_Conv(ir_node *node)
                        } else {
                                /* float -> int conv */
                                if (!mode_is_signed(dst_mode))
-                                       panic("float to unsigned not implemented yet");
+                                       panic("float to unsigned not lowered");
                                return create_ftoi(dbgi, block, new_op, src_mode);
                        }
                } else {
@@ -1642,7 +1643,7 @@ static ir_node *get_stack_pointer_for(ir_node *node)
        }
 
        be_transform_node(stack_pred);
-       stack = (ir_node*)pmap_get(node_to_stack, stack_pred);
+       stack = pmap_get(ir_node, node_to_stack, stack_pred);
        if (stack == NULL) {
                return get_stack_pointer_for(stack_pred);
        }
@@ -2021,7 +2022,10 @@ static ir_node *gen_Alloc(ir_node *node)
        ir_type  *type       = get_Alloc_type(node);
        ir_node  *size       = get_Alloc_count(node);
        ir_node  *stack_pred = get_stack_pointer_for(node);
+       ir_node  *mem        = get_Alloc_mem(node);
+       ir_node  *new_mem    = be_transform_node(mem);
        ir_node  *subsp;
+
        if (get_Alloc_where(node) != stack_alloc)
                panic("only stack-alloc supported in sparc backend (at %+F)", node);
        /* lowerer should have transformed all allocas to byte size */
@@ -2031,44 +2035,45 @@ static ir_node *gen_Alloc(ir_node *node)
        if (is_Const(size)) {
                ir_tarval *tv    = get_Const_tarval(size);
                long       sizel = get_tarval_long(tv);
-               subsp = be_new_IncSP(sp_reg, new_block, stack_pred, sizel, 0);
-               set_irn_dbg_info(subsp, dbgi);
+
+               assert((sizel & (SPARC_STACK_ALIGNMENT - 1)) == 0 && "Found Alloc with misaligned constant");
+               subsp = new_bd_sparc_SubSP_imm(dbgi, new_block, stack_pred, new_mem, NULL, sizel);
        } else {
                ir_node *new_size = be_transform_node(size);
-               subsp = new_bd_sparc_SubSP(dbgi, new_block, stack_pred, new_size);
-               arch_set_irn_register(subsp, sp_reg);
+               subsp = new_bd_sparc_SubSP_reg(dbgi, new_block, stack_pred, new_size, new_mem);
        }
 
-       /* if we are the last IncSP producer in a block then we have to keep
-        * the stack value.
-        * Note: This here keeps all producers which is more than necessary */
-       keep_alive(subsp);
+       ir_node *stack_proj = new_r_Proj(subsp, mode_gp, pn_sparc_SubSP_stack);
+       arch_set_irn_register(stack_proj, sp_reg);
+       /* If we are the last stack producer in a block, we have to keep the
+        * stack value.  This keeps all producers, which is more than necessary. */
+       keep_alive(stack_proj);
 
-       pmap_insert(node_to_stack, node, subsp);
-       /* the "result" is the unmodified sp value */
-       return stack_pred;
+       pmap_insert(node_to_stack, node, stack_proj);
+
+       return subsp;
 }
 
 static ir_node *gen_Proj_Alloc(ir_node *node)
 {
-       ir_node *alloc = get_Proj_pred(node);
-       long     pn    = get_Proj_proj(node);
+       ir_node *alloc     = get_Proj_pred(node);
+       ir_node *new_alloc = be_transform_node(alloc);
+       long     pn        = get_Proj_proj(node);
 
        switch ((pn_Alloc)pn) {
-       case pn_Alloc_M: {
-               ir_node *alloc_mem = get_Alloc_mem(alloc);
-               return be_transform_node(alloc_mem);
-       }
+       case pn_Alloc_M:
+               return new_r_Proj(new_alloc, mode_M, pn_sparc_SubSP_M);
        case pn_Alloc_res: {
-               ir_node *new_alloc = be_transform_node(alloc);
-               return new_alloc;
+               ir_node *addr_proj = new_r_Proj(new_alloc, mode_gp, pn_sparc_SubSP_addr);
+               arch_set_irn_register(addr_proj, arch_get_irn_register(node));
+               return addr_proj;
        }
        case pn_Alloc_X_regular:
        case pn_Alloc_X_except:
-               panic("sparc backend: exception output of alloc not supported (at %+F)",
+               panic("exception output of alloc not supported (at %+F)",
                      node);
        }
-       panic("sparc backend: invalid Proj->Alloc");
+       panic("invalid Proj->Alloc");
 }
 
 static ir_node *gen_Free(ir_node *node)
@@ -2264,7 +2269,7 @@ static ir_node *gen_Proj_Div(ir_node *node)
        } else if (is_sparc_fdiv(new_pred)) {
                res_mode = get_Div_resmode(pred);
        } else {
-               panic("sparc backend: Div transformed to something unexpected: %+F",
+               panic("Div transformed to something unexpected: %+F",
                      new_pred);
        }
        assert((int)pn_sparc_SDiv_res == (int)pn_sparc_UDiv_res);
@@ -2589,7 +2594,7 @@ void sparc_transform_graph(ir_graph *irg)
        /* do code placement, to optimize the position of constants */
        place_code(irg);
        /* backend expects outedges to be always on */
-       edges_assure(irg);
+       assure_edges(irg);
 }
 
 void sparc_init_transform(void)