- Improved addressmode optimisation for conv nodes
[libfirm] / ir / be / ia32 / ia32_nodes_attr.h
index 1bafa75..d9e36dc 100644 (file)
@@ -88,7 +88,7 @@ typedef struct _ia32_attr_t {
 
                unsigned op_flav:2;         /**< flavour of an op (flavour_Div/Mod/DivMod) */
 
-               unsigned flags:4;           /**< indicating if spillable and/or rematerializeable */
+               unsigned flags:4;           /**< indicating if spillable, rematerializeable, stack modifying and/or ignore */
 
                unsigned is_commutative:1;  /**< indicates whether op is commutative or not */
 
@@ -96,12 +96,15 @@ typedef struct _ia32_attr_t {
 
                unsigned got_lea:1;         /**< indicates whether or not this node already consumed a LEA */
 
-               unsigned n_res:7;           /**< number of results produced by this node */
+               unsigned got_reload:1;      /**< set to 1 if node cosumed a reload */
+
+               unsigned n_res:6;           /**< number of results produced by this node */
        } data;
 
-       struct obstack *am_offs;     /**< offsets for AddrMode */
-       struct obstack *plain_offs;  /**< obstack for plain am_offs */
-       ident          *am_sc;       /**< SymConst for AddrMode */
+       int *out_flags;     /**< flags for each produced value */
+
+       int am_offs;        /**< offsets for AddrMode */
+       ident *am_sc;       /**< SymConst for AddrMode */
 
        union {
                tarval *tv;     /**< tarval for immediate operations */
@@ -119,6 +122,8 @@ typedef struct _ia32_attr_t {
 
        long pn_code;       /**< projnum "types" (e.g. indicate compare operators and argument numbers) */
 
+       unsigned latency;   /**< the latency of the instruction in clock cycles */
+
 #ifndef NDEBUG
        const char *orig_node;      /**< holds the name of the original ir node for debugging purposes */
 #endif /* NDEBUG */