X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firprofile.c;h=7ff880585ff6708def776f6149904273a2a9b86c;hb=7e8388fa7996ff182d3aa4e0cdd41b27bed4982f;hp=1609687dd7c328284a0452cf0907ab1f729dcd10;hpb=1ce363f80e6a204d4011f85813362d9bd1d0e7e4;p=libfirm diff --git a/ir/ir/irprofile.c b/ir/ir/irprofile.c index 1609687dd..7ff880585 100644 --- a/ir/ir/irprofile.c +++ b/ir/ir/irprofile.c @@ -172,6 +172,22 @@ fix_ssa(ir_node * bb, void * data) set_Load_mem(get_irn_link(get_irn_link(bb)), mem); } +static void add_constructor(ir_entity *method) +{ + ir_type *method_type = get_entity_type(method); + ident *id = id_unique("constructor_ptrt.%u"); + ir_type *ptr_type = new_type_pointer(id, method_type, mode_P_code); + + ir_type *constructors = get_constructors_type(); + ident *ide = id_unique("constructor_ptr.%u"); + ir_entity *ptr = new_entity(constructors, ide, ptr_type); + ir_graph *irg = get_const_code_irg(); + ir_node *val = new_rd_SymConst_addr_ent(NULL, irg, mode_P_code, + method, NULL); + + set_entity_compiler_generated(ptr, 1); + set_atomic_ent_value(ptr, val); +} /** * Generates a new irg which calls the initializer @@ -239,6 +255,8 @@ gen_initializer_irg(ir_entity * ent_filename, ir_entity * bblock_id, ir_entity * irg_finalize_cons(irg); + add_constructor(ent); + return irg; }