SymConst(ofs_ent) added to represent the offset of an entity.
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Sun, 17 Sep 2006 21:05:59 +0000 (21:05 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Sun, 17 Sep 2006 21:05:59 +0000 (21:05 +0000)
[r8261]

ir/ir/ircons.c
ir/ir/ircons.h
ir/ir/irdump.c
ir/ir/irdumptxt.c

index c5ebac4..f468126 100644 (file)
@@ -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 */
 
index e18fb35..d792e4b 100644 (file)
@@ -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
index 386d9eb..d3729ae 100644 (file)
@@ -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;
index 5687397..23803a6 100644 (file)
@@ -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");