Add ~x + 1 = -x algebraic simplification
[libfirm] / include / libfirm / firmstat.h
index 9ce0abe..056e3ff 100644 (file)
@@ -65,6 +65,9 @@ enum firmstat_optimizations_t {
        FS_OPT_NOT_CMP,                           /**< !(a cmp b) = a !cmp b */
        FS_OPT_OR_SHFT_TO_ROT,                    /**< (x << c) | (x >> (bits - c)) == Rot(x, c) */
        FS_OPT_REASSOC_SHIFT,                     /**< (x SHF c1) SHF c2 = x SHF (c1+c2) */
+       FS_OPT_SHIFT_AND,                         /**< (a SHF c) AND (b SHF c) = (a AND b) SHF c */
+       FS_OPT_SHIFT_OR,                          /**< (a SHF c) OR (b SHF c) = (a OR b) SHF c */
+       FS_OPT_SHIFT_EOR,                         /**< (a SHF c) XOR (b SHF c) = (a XOR b) SHF c */
        FS_OPT_CONV,                              /**< a Conv could be removed */
        FS_OPT_CAST,                              /**< a Cast could be removed */
        FS_OPT_MIN_MAX_EQ,                        /**< Min(a,a) = Max(a,a) = a */
@@ -75,6 +78,10 @@ enum firmstat_optimizations_t {
        FS_OPT_MUX_TO_MAX,                        /**< Mux(a > b, a, b) = Max(a,b) */
        FS_OPT_MUX_TO_ABS,                        /**< Mux(a > b, a, b) = Abs(a,b) */
        FS_OPT_MUX_TO_SHR,                        /**< Mux(a > b, a, b) = a >> b */
+       FS_OPT_IDEM_UNARY,                        /**< Idempotent unary operation */
+       FS_OPT_MINUS_NOT,                         /**< -(~x) = x + 1 */
+       FS_OPT_NOT_MINUS_1,                       /**< ~(x - 1) = -x */
+       FS_OPT_NOT_PLUS_1,                        /**< ~x + 1 = -x */
        FS_OPT_CONST_PHI,                         /**< Constant evaluation on Phi */
        FS_BE_IA32_LEA,                           /**< Lea was created */
        FS_BE_IA32_LOAD_LEA,                      /**< Load merged with a Lea */