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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2023-06-14
          Component|c                           |tree-optimization
             Status|UNCONFIRMED                 |ASSIGNED
            Summary|Wrong code at -O2/3/s on    |[14 Regression] Wrong code
                   |x86_64-linux-gnu            |at -O2/3/s on
                   |                            |x86_64-linux-gnu
   Target Milestone|---                         |14.0
           Keywords|                            |wrong-code
     Ever confirmed|0                           |1

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
So phiopt does this:
phiopt match-simplify trying:
        _4 >= 0 ? iftmp.0_16 : 1
Matching expression match.pd:1990, gimple-match-5.cc:23
Matching expression match.pd:1990, gimple-match-5.cc:23
Applying pattern match.pd:5283, gimple-match-2.cc:942
Applying pattern match.pd:1378, gimple-match-2.cc:7699
Applying pattern match.pd:1885, gimple-match-3.cc:2770
Applying pattern match.pd:4745, gimple-match-7.cc:15371
Folded into the sequence:
_22 = _4 >= 0;
_21 = (int) _22;
_23 = _4 < 0;
_24 = (int) _23;
_25 = iftmp.0_16 | _24;
statement un-sinked:
iftmp.0_16 = _4 >> 6;

The problem is `_4 >> 6` only has a [0,1] range iff `_4 < 0`.
I have to think of a way of fixing this without too much trouble. Maybe
reverting the patch might be the best for now. But there could be other issues
dealing with phiopt and match-and-simplify later on for a similar reasons ...

Reply via email to