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