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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to work|5.0                         |
            Summary|[4.9 Regression] Incorrect  |[4.9/5 Regression]
                   |optimization breaks basic   |Incorrect optimization
                   |arithmetic                  |breaks basic arithmetic
      Known to fail|                            |5.0

--- Comment #10 from Richard Biener <rguenth at gcc dot gnu.org> ---
The simpler testcase reproduces on trunk for me.  Trunk assert:

Index: gcc/tree-ssa-ccp.c
===================================================================
--- gcc/tree-ssa-ccp.c  (revision 221174)
+++ gcc/tree-ssa-ccp.c  (working copy)
@@ -1901,9 +1922,13 @@ evaluate_stmt (gimple stmt)
            }
          else
            {
-             if (wi::bit_and_not (val.value, nonzero_bits) != 0)
-               val.value = wide_int_to_tree (TREE_TYPE (lhs),
-                                             nonzero_bits & val.value);
+             wide_int tem = wi::bit_and_not (val.value, nonzero_bits);
+             if (tem != 0)
+               {
+                 gcc_assert (extend_mask (tem).and_not (val.mask) == 0);
+                 val.value = wide_int_to_tree (TREE_TYPE (lhs),
+                                               nonzero_bits & val.value);
+               }
              if (nonzero_bits == 0)
                val.mask = 0;
              else

Reply via email to