https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89536

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I wonder if we shouldn't do:
--- gcc/tree-ssa-dom.c.jj       2019-02-26 14:13:08.296824100 +0100
+++ gcc/tree-ssa-dom.c  2019-02-28 15:46:52.285495060 +0100
@@ -346,6 +346,9 @@ edge_info::derive_equivalences (tree nam
               boolean types with precision > 1.  */
            if (code == BIT_NOT_EXPR
                && TREE_CODE (rhs) == SSA_NAME
+               && (TREE_CODE (TREE_TYPE (rhs)) == BOOLEAN_TYPE
+                   || (INTEGRAL_TYPE_P (TREE_TYPE (rhs))
+                       && TYPE_PRECISION (TREE_TYPE (rhs)) == 1))
                && ssa_name_has_boolean_range (rhs))
              {
                if (integer_zerop (value))

because while ssa_name_has_boolean_range returns true for both the case where
the type is BOOLEAN_TYPE and where the type is integral with precision 1 (and
unsigned), we do not want to do this if the type has larger precision and just
the value has [0, 1] value range.
Perhaps we just should do the checks and not call ssa_name_has_boolean_range
here.

Reply via email to