/* 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$ */
# 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"
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 */
/* Sel attributes */
typedef struct {
entity *ent; /* entity to select */
- linkage_type ltyp; /* linkage type of the entity */
} sel_attr;
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 */
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
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. */
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
/* @@@@ 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);