From: Michael Beck Date: Sun, 17 Sep 2006 21:05:59 +0000 (+0000) Subject: SymConst(ofs_ent) added to represent the offset of an entity. X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=17de95b0bea6769f2c43104773433c8e0ae5cc81;p=libfirm SymConst(ofs_ent) added to represent the offset of an entity. [r8261] --- diff --git a/ir/ir/ircons.c b/ir/ir/ircons.c index c5ebac445..f46812628 100644 --- a/ir/ir/ircons.c +++ b/ir/ir/ircons.c @@ -1247,27 +1247,39 @@ new_rd_SymConst(dbg_info *db, ir_graph *irg, ir_node *block, symconst_symbol val ir_node *new_rd_SymConst_addr_ent(dbg_info *db, ir_graph *irg, entity *symbol, ir_type *tp) { - symconst_symbol sym = {(ir_type *)symbol}; + symconst_symbol sym; + sym.entity_p = symbol; return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_addr_ent, tp); } /* new_rd_SymConst_addr_ent */ +ir_node *new_rd_SymConst_ofs_ent(dbg_info *db, ir_graph *irg, entity *symbol, ir_type *tp) +{ + symconst_symbol sym; + sym.entity_p = symbol; + return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_ofs_ent, tp); +} /* new_rd_SymConst_ofs_ent */ + ir_node *new_rd_SymConst_addr_name(dbg_info *db, ir_graph *irg, ident *symbol, ir_type *tp) { - symconst_symbol sym = {(ir_type *)symbol}; + symconst_symbol sym; + sym.ident_p = symbol; return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_addr_name, tp); } /* new_rd_SymConst_addr_name */ ir_node *new_rd_SymConst_type_tag(dbg_info *db, ir_graph *irg, ir_type *symbol, ir_type *tp) { - symconst_symbol sym = {symbol}; + symconst_symbol sym; + sym.type_p = symbol; return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_type_tag, tp); } /* new_rd_SymConst_type_tag */ ir_node *new_rd_SymConst_size(dbg_info *db, ir_graph *irg, ir_type *symbol, ir_type *tp) { - symconst_symbol sym = {symbol}; + symconst_symbol sym; + sym.type_p = symbol; return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_type_size, tp); } /* new_rd_SymConst_size */ ir_node *new_rd_SymConst_align(dbg_info *db, ir_graph *irg, ir_type *symbol, ir_type *tp) { - symconst_symbol sym = {symbol}; + symconst_symbol sym; + sym.type_p = symbol; return new_rd_SymConst_type(db, irg, get_irg_start_block(irg), sym, symconst_type_align, tp); } /* new_rd_SymConst_align */ diff --git a/ir/ir/ircons.h b/ir/ir/ircons.h index e18fb352b..d792e4beb 100644 --- a/ir/ir/ircons.h +++ b/ir/ir/ircons.h @@ -1292,6 +1292,13 @@ ir_node *new_rd_SymConst (dbg_info *db, ir_graph *irg, ir_node *block, * Adds the SymConst to the start block of irg. */ ir_node *new_rd_SymConst_addr_ent (dbg_info *db, ir_graph *irg, entity *symbol, ir_type *tp); +/** Constructor for a SymConst ofs_ent node. + * + * Same as new_rd_SymConst_type, except that the constructor is tailored for + * symconst_ofs_ent. + * Adds the SymConst to the start block of irg. */ +ir_node *new_rd_SymConst_ofs_ent (dbg_info *db, ir_graph *irg, entity *symbol, ir_type *tp); + /** Constructor for a SymConst addr_name node. * * Same as new_rd_SymConst_type, except that the constructor is tailored for diff --git a/ir/ir/irdump.c b/ir/ir/irdump.c index 386d9eb40..d3729aea7 100644 --- a/ir/ir/irdump.c +++ b/ir/ir/irdump.c @@ -679,6 +679,9 @@ int dump_node_opcode(FILE *F, ir_node *n) case symconst_addr_ent: fprintf(F, "SymC &%s", get_entity_name(get_SymConst_entity(n))); break; + case symconst_ofs_ent: + fprintf(F, "SymC %s offset", get_entity_name(get_SymConst_entity(n))); + break; case symconst_type_tag: fprintf(F, "SymC %s tag", get_type_name_ex(get_SymConst_type(n), &bad)); break; diff --git a/ir/ir/irdumptxt.c b/ir/ir/irdumptxt.c index 568739791..23803a6a0 100644 --- a/ir/ir/irdumptxt.c +++ b/ir/ir/irdumptxt.c @@ -287,6 +287,11 @@ int dump_irnode_to_file(FILE *F, ir_node *n) { fprintf(F, " entity: "); dump_entity_to_file(F, get_SymConst_entity(n), dump_verbosity_onlynames); break; + case symconst_ofs_ent: + fprintf(F, " kind: offset\n"); + fprintf(F, " entity: "); + dump_entity_to_file(F, get_SymConst_entity(n), dump_verbosity_onlynames); + break; case symconst_type_tag: fprintf(F, " kind: type_tag\n"); fprintf(F, " type: "); @@ -564,6 +569,7 @@ void dump_entity_to_file_prefix (FILE *F, entity *ent, char *prefix, unsigned fprintf(F, (cc & cc_last_on_top) ? "last param on top, " : "first param on top, "); fprintf(F, (cc & cc_callee_clear_stk) ? "callee clear stack" : "caller clear stack"); } + fprintf(F, "\n%s vtable number: %u", prefix, get_entity_vtable_number(ent)); } fprintf(F, "\n");