__FUNCTION__ is only available under GNU C, else __FILE__ is used
[libfirm] / ir / ir / irnode_t.h
index 44056e1..17549a7 100644 (file)
@@ -1,9 +1,9 @@
 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
-** All rights reserved.
-**
-** Authors: Martin Trapp, Christian Schaefer
-**
-** declarations of an ir node
+* All rights reserved.
+*
+* Authors: Martin Trapp, Christian Schaefer
+*
+* declarations of an ir node
 */
 
 /* $Id$ */
@@ -14,7 +14,7 @@
 # include "irnode.h"
 # include "xprintf.h"
 # include "irop_t.h"
-# include "common_t.h"
+# include "firm_common_t.h"
 # include "irdom_t.h" /* For size of struct dom_info. */
 # include "dbginfo.h"
 
@@ -37,6 +37,10 @@ typedef struct {
   ir_node ** in_cg;           /* array with predecessors in
                               * interprocedural_view, if they differ
                               * from intraprocedural predecessors */
+  int *backedge;              /* Field n set to true if pred n is backedge.
+                                @@@ Ev. replace by bitfield! */
+  int *cg_backedge;           /* Field n set to true if pred n is interprocedural backedge.
+                                @@@ Ev. replace by bitfield! */
 } block_attr;
 
 /* Cond attributes */
@@ -61,7 +65,6 @@ typedef struct {
 /* Sel attributes */
 typedef struct {
   entity *ent;          /* entity to select */
-  linkage_type ltyp;    /* linkage type of the entity */
 } sel_attr;
 
 typedef struct {
@@ -92,6 +95,8 @@ typedef struct
 typedef struct {
   long proj;                 /* contains the result position to project (Proj) */
   ir_node ** in_cg;          /* array with interprocedural predecessors (Phi) */
+  int *backedge;              /* Field n set to true if pred n is backedge.
+                                @@@ Ev. replace by bitfield! */
 } filter_attr;
 
 /* EndReg/EndExcept attributes */
@@ -116,8 +121,9 @@ typedef union {
   symconst_attr  i;     /* For SymConst. */
   sel_attr       s;     /* For Sel. */
   call_attr      call;  /* For Call: pointer to the type of the method to call */
+  callbegin_attr callbegin; /* For CallBegin */
   alloc_attr     a;     /* For Alloc. */
-  io_attr               io;    /* For InstOf */
+  io_attr       io;    /* For InstOf */
   type          *f;     /* For Free. */
   int            phi0_pos;  /* For Phi. Used to remember the value defined by
                               this Phi node.  Needed when the Phi is completed
@@ -125,10 +131,12 @@ typedef union {
                               predecessors. If this attribute is set, the Phi
                               node takes the role of the obsolete Phi0 node,
                               therefore the name. */
+  int *phi_backedge;    /* For Phi after construction.
+                          Field n set to true if pred n is backedge.
+                          @@@ Ev. replace by bitfield! */
   long           proj;  /* For Proj: contains the result position to project */
   filter_attr    filter;    /* For Filter */
   end_attr       end;       /* For EndReg, EndExcept */
-  callbegin_attr callbegin; /* For CallBegin */
 #if PRECISE_EXC_CONTEXT
   struct ir_node **frag_arr; /* For Phi node construction in case of exceptions
                               for nodes Store, Load, Div, Mod, Quot, DivMod. */
@@ -146,13 +154,13 @@ struct ir_node {
   ir_mode *mode;           /* Mode of this node. */
   unsigned long visited;   /* visited counter for walks of the graph */
   struct ir_node **in;     /* array with predecessors / operands */
-  struct ir_node *link;    /* for linking nodes somehow to a list, e.g.
+  void *link;              /* to attach additional information to the node, e.g.
                               used while construction to link Phi0 nodes and
                              during optimization to link to nodes that
                              shall replace a node. */
   /**  Fields for optimizations / analysis information **/
   struct ir_node **out;    /* array of out edges */
-  struct dbg_info* dbi;           /* A pointer to information for debug support. */
+  struct dbg_info* dbi;    /* A pointer to information for debug support. */
   /** For debugging **/
 #ifdef DEBUG_libfirm
   int node_nr;             /* a unique node number for each node to make output
@@ -172,13 +180,16 @@ copy_attrs (ir_node *old, ir_node *new);
 /* @@@@ brauchen wir dienoch? dann fliegt ev. das xprint raus?*/
 int ir_node_print (XP_PAR1, const xprintf_info *, XP_PARN);
 
+/* Returns the array with the ins.  The content of the array may not be
+   changed.  */
+ir_node     **get_irn_in            (ir_node *node);
 
 /** access attributes directly **/
-inline tarval       *get_irn_const_attr    (ir_node *node);
-inline long          get_irn_proj_attr     (ir_node *node);
-inline alloc_attr    get_irn_alloc_attr    (ir_node *node);
-inline type         *get_irn_free_attr     (ir_node *node);
-inline symconst_attr get_irn_symconst_attr (ir_node *node);
+INLINE tarval       *get_irn_const_attr    (ir_node *node);
+INLINE long          get_irn_proj_attr     (ir_node *node);
+INLINE alloc_attr    get_irn_alloc_attr    (ir_node *node);
+INLINE type         *get_irn_free_attr     (ir_node *node);
+INLINE symconst_attr get_irn_symconst_attr (ir_node *node);
 type         *get_irn_call_attr     (ir_node *node);
 sel_attr      get_irn_sel_attr      (ir_node *node);
 int           get_irn_phi_attr      (ir_node *node);