use more IR_RESOURCE_TYPE_VISITED, remove pointless inc_master_type_visited calls
[libfirm] / ir / be / beabi.c
index 2324457..75e43ff 100644 (file)
@@ -1233,8 +1233,6 @@ static ir_type *compute_arg_type(be_abi_irg_t *env, be_abi_call_t *call,
                                arg->stack_ent = copy_entity_own(val_ent, res);
                                set_entity_link(val_ent, arg->stack_ent);
                                set_entity_link(arg->stack_ent, NULL);
-                               /* must be automatic to set a fixed layout */
-                               set_entity_allocation(arg->stack_ent, allocation_automatic);
                        } else {
                                /* create a new entity */
                                snprintf(buf, sizeof(buf), "param_%d", i);
@@ -1507,7 +1505,6 @@ static ir_entity *get_argument_entity(ir_entity *ent, lower_frame_sels_env_t *ct
                argument_ent = copy_entity_own(ent, frame_tp);
 
                /* must be automatic to set a fixed layout */
-               set_entity_allocation(argument_ent, allocation_automatic);
                set_entity_offset(argument_ent, offset);
                offset += get_type_size_bytes(tp);
 
@@ -1667,7 +1664,6 @@ static void fix_address_of_parameter_access(be_abi_irg_t *env, ent_pos_pair *val
                                set_entity_owner(ent, frame_tp);
                                add_class_member(frame_tp, ent);
                                /* must be automatic to set a fixed layout */
-                               set_entity_allocation(ent, allocation_automatic);
                                set_entity_offset(ent, offset);
                                offset += get_type_size_bytes(tp);
                        }
@@ -1759,7 +1755,9 @@ static void fix_outer_variable_access(be_abi_irg_t *env,
 
                if (! is_method_entity(ent))
                        continue;
-               if (get_entity_peculiarity(ent) == peculiarity_description)
+
+               irg = get_entity_irg(ent);
+               if (irg == NULL)
                        continue;
 
                /*
@@ -1768,7 +1766,6 @@ static void fix_outer_variable_access(be_abi_irg_t *env,
                 */
                ctx->static_link_pos = 0;
 
-               irg = get_entity_irg(ent);
                irg_walk_graph(irg, NULL, update_outer_frame_sels, ctx);
        }
 }
@@ -1835,6 +1832,11 @@ static void modify_irg(be_abi_irg_t *env)
        ctx.link_class       = env->arch_env->link_class;
        ctx.frame_tp         = get_irg_frame_type(irg);
 
+       /* layout the stackframe now */
+       if (get_type_state(ctx.frame_tp) == layout_undefined) {
+               default_layout_compound_type(ctx.frame_tp);
+       }
+
        /* we will possible add new entities to the frame: set the layout to undefined */
        assert(get_type_state(ctx.frame_tp) == layout_fixed);
        set_type_state(ctx.frame_tp, layout_undefined);
@@ -2109,8 +2111,7 @@ static ir_entity *create_trampoline(be_main_env_t *be, ir_entity *method)
        ir_type   *parent = be->pic_trampolines_type;
        ir_entity *ent    = new_entity(parent, old_id, type);
        set_entity_ld_ident(ent, id);
-       set_entity_visibility(ent, visibility_local);
-       set_entity_variability(ent, variability_uninitialized);
+       set_entity_visibility(ent, ir_visibility_local);
 
        return ent;
 }
@@ -2134,12 +2135,11 @@ static ir_entity *create_pic_symbol(be_main_env_t *be, ir_entity *entity)
        ident     *old_id = get_entity_ld_ident(entity);
        ident     *id     = id_mangle3("L", old_id, "$non_lazy_ptr");
        ir_type   *e_type = get_entity_type(entity);
-       ir_type   *type   = new_type_pointer(id, e_type, mode_P_data);
+       ir_type   *type   = new_type_pointer(e_type);
        ir_type   *parent = be->pic_symbols_type;
        ir_entity *ent    = new_entity(parent, old_id, type);
        set_entity_ld_ident(ent, id);
-       set_entity_visibility(ent, visibility_local);
-       set_entity_variability(ent, variability_uninitialized);
+       set_entity_visibility(ent, ir_visibility_local);
 
        return ent;
 }
@@ -2162,7 +2162,7 @@ static ir_entity *get_pic_symbol(be_main_env_t *env, ir_entity *entity)
  */
 static int can_address_relative(ir_entity *entity)
 {
-       return get_entity_visibility(entity) != visibility_external_allocated;
+       return get_entity_visibility(entity) != ir_visibility_external;
 }
 
 /** patches SymConsts to work in position independent code */
@@ -2172,7 +2172,6 @@ static void fix_pic_symconsts(ir_node *node, void *data)
        ir_node      *pic_base;
        ir_node      *add;
        ir_node      *block;
-       ir_node      *unknown;
        ir_mode      *mode;
        ir_node      *load;
        ir_node      *load_res;
@@ -2214,7 +2213,6 @@ static void fix_pic_symconsts(ir_node *node, void *data)
 
                /* everything else is accessed relative to EIP */
                mode     = get_irn_mode(pred);
-               unknown  = new_r_Unknown(irg, mode);
                pic_base = arch_code_generator_get_pic_base(env->birg->cg);
 
                /* all ok now for locally constructed stuff */
@@ -2254,7 +2252,6 @@ be_abi_irg_t *be_abi_introduce(be_irg_t *birg)
 
        pmap_entry *ent;
        ir_node *dummy;
-       optimization_state_t state;
        unsigned *limited_bitset;
        arch_register_req_t *sp_req;
 
@@ -2288,12 +2285,7 @@ be_abi_irg_t *be_abi_introduce(be_irg_t *birg)
                sp_req->type |= arch_register_req_type_ignore;
        }
 
-       /* Beware: later we replace this node by the real one, ensure it is not CSE'd
-          to another Unknown or the stack pointer gets used */
-       save_optimization_state(&state);
-       set_optimize(0);
-       env->init_sp = dummy  = new_r_Unknown(irg, env->arch_env->sp->reg_class->mode);
-       restore_optimization_state(&state);
+       env->init_sp = dummy = new_r_Dummy(irg, env->arch_env->sp->reg_class->mode);
 
        env->calls = NEW_ARR_F(ir_node*, 0);
 
@@ -2634,10 +2626,9 @@ void be_abi_fix_stack_bias(be_abi_irg_t *env)
        frame_tp = get_irg_frame_type(irg);
        for (i = get_class_n_members(frame_tp) - 1; i >= 0; --i) {
                ir_entity *ent = get_class_member(frame_tp, i);
+               ir_graph  *irg = get_entity_irg(ent);
 
-               if (is_method_entity(ent) && get_entity_peculiarity(ent) != peculiarity_description) {
-                       ir_graph *irg = get_entity_irg(ent);
-
+               if (irg != NULL) {
                        irg_walk_graph(irg, NULL, lower_outer_frame_sels, env);
                }
        }