sparc: remove unnecessary convs before stores
[libfirm] / include / libfirm / firm_types.h
index c3c5236..a126592 100644 (file)
@@ -68,7 +68,6 @@ typedef void irg_reg_walk_func(ir_region *, void *);
 
 /* settings */
 typedef struct ir_settings_arch_dep_t ir_settings_arch_dep_t;
-typedef struct ir_settings_if_conv_t  ir_settings_if_conv_t;
 
 /* Needed for MSVC to suppress warnings because it doest NOT handle const right. */
 typedef const ir_node *ir_node_cnst_ptr;
@@ -93,7 +92,7 @@ typedef const ir_node *ir_node_cnst_ptr;
 typedef ir_node *uninitialized_local_variable_func_t(ir_graph *irg, ir_mode *mode, int pos);
 
 #ifdef __cplusplus
-#      define ENUM_BITSET(type) \
+# define ENUM_BITSET(type) \
        extern "C++" { \
                static inline type operator ~  (type  a)         { return     (type)~(int)a;           } \
                static inline type operator &  (type  a, type b) { return     (type)((int)a & (int)b); } \
@@ -104,20 +103,55 @@ typedef ir_node *uninitialized_local_variable_func_t(ir_graph *irg, ir_mode *mod
                static inline type operator |= (type& a, type b) { return a = (type)((int)a | (int)b); } \
        }
 #else
-#      define ENUM_BITSET(type)
+# define ENUM_BITSET(type)
 #endif
 
 #ifdef __cplusplus
-#      define ENUM_COUNTABLE(type) \
+# define ENUM_COUNTABLE(type) \
        extern "C++" { \
                static inline type operator ++(type& a) { return a = (type)((int)a + 1); } \
                static inline type operator --(type& a) { return a = (type)((int)a - 1); } \
        }
 #else
-#      define ENUM_COUNTABLE(type)
+# define ENUM_COUNTABLE(type)
 #endif
 
+/**
+ * Relations for comparing numbers
+ */
+typedef enum ir_relation {
+       ir_relation_false              = 0,       /**< always false */
+       ir_relation_equal              = 1u << 0, /**< equal */
+       ir_relation_less               = 1u << 1, /**< less */
+       ir_relation_greater            = 1u << 2, /**< greater */
+       ir_relation_unordered          = 1u << 3, /**< unordered */
+       ir_relation_less_equal         = ir_relation_equal|ir_relation_less,    /**< less or equal */
+       ir_relation_greater_equal      = ir_relation_equal|ir_relation_greater, /**< greater or equal */
+       ir_relation_less_greater       = ir_relation_less|ir_relation_greater,  /** less or greater ('not equal' for integer numbers) */
+       ir_relation_less_equal_greater = ir_relation_equal|ir_relation_less|ir_relation_greater, /**< less equal or greater ('not unordered') */
+       ir_relation_unordered_equal    = ir_relation_unordered|ir_relation_equal, /**< unordered or equal */
+       ir_relation_unordered_less     = ir_relation_unordered|ir_relation_less,  /**< unorderedor less */
+       ir_relation_unordered_less_equal = ir_relation_unordered|ir_relation_less|ir_relation_equal, /**< unordered, less or equal */
+       ir_relation_unordered_greater    = ir_relation_unordered|ir_relation_greater, /**< unordered or greater */
+       ir_relation_unordered_greater_equal = ir_relation_unordered|ir_relation_greater|ir_relation_equal, /**< unordered, greater or equal */
+       ir_relation_unordered_less_greater  = ir_relation_unordered|ir_relation_less|ir_relation_greater, /**< unordered, less or greater ('not equal' for floatingpoint numbers) */
+       ir_relation_true                    = ir_relation_equal|ir_relation_less|ir_relation_greater|ir_relation_unordered, /**< always true */
+} ir_relation;
+ENUM_BITSET(ir_relation)
 
+/**
+ * constrained flags for memory operations.
+ */
+typedef enum ir_cons_flags {
+       cons_none             = 0,        /**< No constrains. */
+       cons_volatile         = 1U << 0,  /**< Memory operation is volatile. */
+       cons_unaligned        = 1U << 1,  /**< Memory operation is unaligned. */
+       cons_floats           = 1U << 2,  /**< Memory operation can float. */
+       cons_throws_exception = 1U << 3,  /**< fragile op throws exception (and
+                                              produces X_regular and X_except
+                                              values) */
+} ir_cons_flags;
+ENUM_BITSET(ir_cons_flags)
 
 /** op_pin_state_pinned states. */
 typedef enum op_pin_state {
@@ -147,10 +181,17 @@ typedef enum mtp_additional_properties {
        mtp_no_property            = 0x00000000, /**< no additional properties, default */
        mtp_property_const         = 0x00000001, /**< This method did not access memory and calculates
                                                      its return values solely from its parameters.
+                                                     The only observable effect of a const function must be its
+                                                     return value. So they must not exhibit infinite loops or wait
+                                                     for user input. The return value must not depend on any
+                                                     global variables/state.
                                                      GCC: __attribute__((const)). */
        mtp_property_pure          = 0x00000002, /**< This method did NOT write to memory and calculates
                                                      its return values solely from its parameters and
                                                      the memory they points to (or global vars).
+                                                     The only observable effect of a const function must be its
+                                                     return value. So they must not exhibit infinite loops or wait
+                                                     for user input.
                                                      GCC: __attribute__((pure)). */
        mtp_property_noreturn      = 0x00000004, /**< This method did not return due to an aborting system
                                                      call.
@@ -232,18 +273,9 @@ typedef enum ir_builtin_kind {
        ir_bk_inport,                 /**< in port */
        ir_bk_outport,                /**< out port */
        ir_bk_inner_trampoline,       /**< address of a trampoline for GCC inner functions */
+       ir_bk_last = ir_bk_inner_trampoline,
 } ir_builtin_kind;
 
-/**
- * Some projection numbers must be always equal to support automatic phi construction
- */
-enum pn_generic {
-       pn_Generic_M         = 0,  /**< The memory result. */
-       pn_Generic_X_regular = 1,  /**< Execution result if no exception occurred. */
-       pn_Generic_X_except  = 2,  /**< The control flow result branching to the exception handler */
-       pn_Generic_other     = 3   /**< First free projection number */
-};
-
 /**
  * Possible return values of value_classify().
  */
@@ -254,6 +286,22 @@ typedef enum ir_value_classify_sign {
                                              no signed zero exists or < 0 else */
 } ir_value_classify_sign;
 
+/**
+ * This enumeration flags the volatility of entities and Loads/Stores.
+ */
+typedef enum {
+       volatility_non_volatile,    /**< The entity is not volatile. Default. */
+       volatility_is_volatile      /**< The entity is volatile. */
+} ir_volatility;
+
+/**
+ * This enumeration flags the align of Loads/Stores.
+ */
+typedef enum {
+       align_is_aligned = 0, /**< The entity is aligned. Default */
+       align_non_aligned,    /**< The entity is not aligned. */
+} ir_align;
+
 #include "end.h"
 
 #endif