https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88702
Bug ID: 88702
Summary: [6/7/8 regression] We do terrible job optimizing
IsHTMLWhitespace from Firefox
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: ipa
Assignee: unassigned at gcc dot gnu.org
Reporter: hubicka at gcc dot gnu.org
CC: marxin at gcc dot gnu.org
Target Milestone: ---
compiling:
int IsHTMLWhitespace(int aChar) {
return aChar == 0x0009 || aChar == 0x000A ||
aChar == 0x000C || aChar == 0x000D ||
aChar == 0x0020;
}
q(int a,int b, int c)
{
return IsHTMLWhitespace (a) && IsHTMLWhitespace (b) && IsHTMLWhitespace (c);
}
we do quite funny things by ipa-splitting IsHTMLWhitespace:
IsHTMLWhitespace (int aChar)
{
unsigned int aChar.1_1;
unsigned int _2;
_Bool _3;
_Bool _4;
_Bool _5;
int iftmp.0_6;
int iftmp.0_8;
<bb 2> [100.00%]:
aChar.1_1 = (unsigned int) aChar_7(D);
_2 = aChar.1_1 + 4294967287;
_3 = _2 <= 1;
_4 = aChar_7(D) == 12;
_5 = _3 | _4;
if (_5 != 0)
goto <bb 4>; [46.00%]
else
goto <bb 3>; [54.00%]
<bb 3> [54.00%]:
iftmp.0_8 = IsHTMLWhitespace.part.0 (aChar_7(D));
<bb 4> [100.00%]:
# iftmp.0_6 = PHI <1(2), iftmp.0_8(3)>
return iftmp.0_6;
}
this is partly caused by the fact that we are not able to optimize early the
sequence of compares to shift. In Firefox later we fail to inline the functions
and produce some terrible code which slows down rerf-reftest/dep-check-1.html
Firefox benchmark