[Bug tree-optimization/110252] [14 Regression] Wrong code at -O2/3/s on x86_64-linux-gnu
pinskia at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jun 14 16:13:44 GMT 2023
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 ...
More information about the Gcc-bugs
mailing list