fixed the fix of the fix (that was fix)
[libfirm] / ir / ir / irnode_t.h
index 7511ee7..13efa35 100644 (file)
@@ -56,7 +56,7 @@ typedef struct {
        /* 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.
@@ -74,7 +74,7 @@ typedef struct {
                                         @@@ @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;
@@ -172,16 +172,19 @@ typedef struct {
 } 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 {
@@ -207,7 +210,11 @@ 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,
@@ -231,14 +238,14 @@ typedef union {
                                           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;
 
 /**
@@ -443,7 +450,6 @@ static INLINE ir_node *
 _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));
 
@@ -662,6 +668,12 @@ _is_NoMem(const ir_node *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);
@@ -698,6 +710,12 @@ _is_Sub(const ir_node *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);
@@ -834,6 +852,12 @@ _is_Raise(const ir_node *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));
@@ -1061,16 +1085,19 @@ static INLINE unsigned _get_irn_idx(const 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)