https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99305
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |missed-optimization,
| |needs-bisection
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
Target Milestone|--- |11.0
Last reconfirmed| |2021-03-01
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed. Some forwprop/match.pd prevents phiopt to trigger:
GCC 10 (forwprop->phiopt):
<bb 2> [local count: 1073741824]:
_7 = (unsigned char) c_2(D);
_8 = _7 + 208;
- if (_8 <= 9)
- goto <bb 3>; [50.00%]
- else
- goto <bb 4>; [50.00%]
-
- <bb 3> [local count: 536870913]:
-
- <bb 4> [local count: 1073741824]:
- # iftmp.1_1 = PHI <1(3), 0(2)>
- return iftmp.1_1;
+ _9 = _8 <= 9;
+ return _9;
forwprop difference GCC 10/11:
- Replaced '_9 != 0' with '_8 <= 9'
-bar (char c)
+bool bar (char c)
{
bool iftmp.1_1;
- unsigned char _7;
- unsigned char _8;
+ unsigned char c.0_4;
+ unsigned char _5;
+ bool _6;
+ bool _7;
<bb 2> [local count: 1073741824]:
- _7 = (unsigned char) c_2(D);
- _8 = _7 + 208;
- if (_8 <= 9)
+ if (c_2(D) != 0)
goto <bb 3>; [50.00%]
else
goto <bb 4>; [50.00%]
<bb 3> [local count: 536870913]:
+ c.0_4 = (unsigned char) c_2(D);
+ _5 = c.0_4 + 208;
+ _6 = _5 <= 9;
+ _7 = -_6;
<bb 4> [local count: 1073741824]:
- # iftmp.1_1 = PHI <1(3), 0(2)>
+ # iftmp.1_1 = PHI <_7(3), 0(2)>
return iftmp.1_1;