cleanup space generation logic and make it more robust for union constructs
[libfirm] / ir / ir / irtypes.h
index e69ae21..11c5471 100644 (file)
@@ -56,7 +56,7 @@ struct ir_op {
        op_arity opar;          /**< The arity of operator. */
        int op_index;           /**< The index of the first data operand, 0 for most cases, 1 for Div etc. */
        unsigned flags;         /**< Flags describing the behavior of the ir_op, a bitmasks of irop_flags. */
-       void *tag;              /**< Some custom pointer the op's creator can attach stuff to. */
+       unsigned tag;           /**< Some custom TAG value the op's creator set to. */
        void *attr;             /**< custom pointer where op's creator can attach attribute stuff to. */
 
        ir_op_ops ops;          /**< The operations of the this op. */
@@ -126,6 +126,7 @@ typedef struct {
        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 has_label:1;       /**< Set if this block has a label assigned. */
+       unsigned marked:1;          /**< Can be set/unset to temporary mark a block. */
        ir_node **graph_arr;        /**< An array to store all parameters. */
        /* Attributes holding analyses information */
        ir_dom_info dom;            /**< Datastructure that holds information about dominators.
@@ -285,11 +286,12 @@ typedef struct {
 
 /** Inline Assembler support attribute. */
 typedef struct {
+       /* BEWARE: pin state MUST be the first attribute */
+       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. */
-    op_pin_state      pin_state;  /**< the pin state for operations that might generate a exception */
 } asm_attr;
 
 /** Some IR-nodes just have one attribute, these are stored here,
@@ -501,6 +503,7 @@ struct ir_graph {
        unsigned using_irn_visited   : 1;  /**< set to 1 if we are currently using the visited flag */
        unsigned using_block_visited : 1;  /**< set to 1 if we are currently using the block_visited flag */
        unsigned using_irn_link      : 1;  /**< set to 1 if we are currently using the irn_link fields */
+       unsigned using_block_mark    : 1;  /**< set to 1 if we are currently using the block mark flags */
 #endif
 };