/* Attributes private to construction: */
unsigned is_matured:1; /**< If set, all in-nodes of the block are fixed. */
unsigned is_dead:1; /**< If set, the block is dead (and could be replace by a Bad. */
- unsigned is_mb_head:1; /**< Set if this block is a macroblock head. */
+ unsigned is_mb_head:1; /**< Set if this block is a macroblock head. */
ir_node **graph_arr; /**< An array to store all parameters. */
/* Attributes holding analyses information */
ir_dom_info dom; /**< Datastructure that holds information about dominators.
@@@ @todo Ev. replace by bit field! */
ir_extblk *extblk; /**< The extended basic block this block belongs to. */
ir_region *region; /**< The immediate structural region this block belongs to. */
- unsigned mb_depth; /**< The macroblock depth: A distance from the macroblock header */
+ unsigned mb_depth; /**< The macroblock depth: A distance from the macroblock header */
struct list_head succ_head; /**< A list head for all successor edges of a block. */
} block_attr;
} store_attr;
typedef struct {
- int pos; /**< For Phi. Used to remember the value defined by
- this Phi node. Needed when the Phi is completed
- to call get_r_internal_value to find the
- predecessors. If this attribute is set, the Phi
- node takes the role of the obsolete Phi0 node,
- therefore the name. */
+ int pos; /**< For Phi0. Used to remember the value defined by
+ this Phi node. Needed when the Phi is completed
+ to call get_r_internal_value to find the
+ predecessors. If this attribute is set, the Phi
+ node takes the role of the obsolete Phi0 node,
+ therefore the name. */
} phi0_attr;
-typedef pn_Cmp confirm_attr; /**< Attribute to hold compare operation */
+/**< Confirm attribute. */
+typedef struct {
+ pn_Cmp cmp; /**< The compare operation. */
+} confirm_attr;
/** CopyB attribute. */
typedef struct {
/** Inline Assembler support attribute. */
typedef struct {
- ident *asm_text; /**< The inline assembler text. */
+ op_pin_state pin_state; /**< the pin state for operations that might generate a exception */
+ ident *asm_text; /**< The inline assembler text. */
+ ir_asm_constraint *inputs; /**< Input constraints. */
+ ir_asm_constraint *outputs; /**< Output constraints. */
+ ident **clobber; /**< List of clobbered registers. */
} asm_attr;
/** Some IR-nodes just have one attribute, these are stored here,
Field n set to true if pred n is backedge.
@todo Ev. replace by bitfield! */
long proj; /**< For Proj: contains the result position to project */
- confirm_attr confirm_cmp; /**< For Confirm: compare operation */
+ confirm_attr confirm; /**< For Confirm: compare operation and region. */
filter_attr filter; /**< For Filter */
except_attr except; /**< For Phi node construction in case of exceptions */
copyb_attr copyb; /**< For CopyB operation */
bound_attr bound; /**< For Bound operation */
conv_attr conv; /**< For Conv operation */
divmod_attr divmod; /**< For Div/Mod/DivMod operation */
- asm_attr asm; /**< For ASM operation. */
+ asm_attr assem; /**< For ASM operation. */
} attr;
/**
_get_irn_intra_n(const ir_node *node, int n) {
ir_node *nn;
- int arn = _get_irn_intra_arity(node);
assert(node);
assert(-1 <= n && n < _get_irn_intra_arity(node));
return (_get_irn_op(node) == op_NoMem);
}
+static INLINE int
+_is_Minus(const ir_node *node) {
+ assert(node);
+ return (_get_irn_op(node) == op_Minus);
+}
+
static INLINE int
_is_Mod(const ir_node *node) {
assert(node);
return (_get_irn_op(node) == op_Sub);
}
+static INLINE int
+_is_Tuple(const ir_node *node) {
+ assert(node);
+ return (_get_irn_op(node) == op_Tuple);
+}
+
static INLINE int
_is_Start(const ir_node *node) {
assert(node);
return (_get_irn_op(node) == op_Raise);
}
+static INLINE int
+_is_ASM(const ir_node *node) {
+ assert(node);
+ return (_get_irn_op(node) == op_ASM);
+}
+
static INLINE int
_is_no_Block(const ir_node *node) {
assert(node && _is_ir_node(node));
#define is_Alloc(node) _is_Alloc(node)
#define is_Jmp(node) _is_Jmp(node)
#define is_Raise(node) _is_Raise(node)
+#define is_ASM(node) _is_ASM(node)
#define is_Bad(node) _is_Bad(node)
#define is_NoMem(node) _is_NoMem(node)
#define is_Start(node) _is_Start(node)
#define is_End(node) _is_End(node)
+#define is_Minus(node) _is_Minus(node)
#define is_Mod(node) _is_Mod(node)
#define is_Div(node) _is_Div(node)
#define is_DivMod(node) _is_DivMod(node)
#define is_Quot(node) _is_Quot(node)
#define is_Add(node) _is_Add(node)
#define is_Sub(node) _is_Sub(node)
+#define is_Tuple(node) _is_Tuple(node)
#define is_no_Block(node) _is_no_Block(node)
#define is_Block(node) _is_Block(node)
#define get_Block_n_cfgpreds(node) _get_Block_n_cfgpreds(node)