https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70897
Bug ID: 70897 Summary: Confused branch predictors Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: hubicka at gcc dot gnu.org Target Milestone: --- Martin has collected predictor hitrates with current mainline. It seems that some of predictors no longer works very well. In particular: loop iv compare, continue, const return, fail alloc, zero-sized array, early return (on trees), call all have very low hitrates. This is a regression wrt early GCC 4.x releases when the regular predictor testing broke. SPECv6: HEURISTICS BRANCHES (REL) HITRATE COVERAGE COVERAGE (REL) loop iv compare 70 0.1% 59.31% / 71.45% 391732444 391.73M 0.0% unconditional jump 252 0.2% 100.00% / 100.00% 62269 62.27K 0.0% guess loop iv compare 362 0.3% 89.02% / 90.08% 2703184164 2.70G 0.2% continue 429 0.4% 12.85% / 90.20% 37779791284 37.78G 2.9% negative return 919 0.8% 54.79% / 57.15% 11577463479 11.58G 0.9% null return 1083 1.0% 99.73% / 99.96% 673967611 673.97M 0.1% const return 1120 1.0% 11.66% / 96.19% 1856118902 1.86G 0.1% fail alloc 1151 1.1% 57.13% / 100.00% 144823 144.82K 0.0% zero-sized array 1960 1.8% 51.41% / 98.82% 104224 104.22K 0.0% loop guard 3229 3.0% 76.78% / 82.17% 60212618544 60.21G 4.6% noreturn call 3434 3.2% 100.00% / 100.00% 1910587253 1.91G 0.1% overflow 3755 3.4% 100.00% / 100.00% 208357 208.36K 0.0% opcode values positive (on trees) 5759 5.3% 58.56% / 82.94% 59387315517 59.39G 4.6% loop iterations 7019 6.4% 87.65% / 87.65% 229118021898 229.12G 17.6% early return (on trees) 8564 7.9% 52.30% / 80.93% 42808951372 42.81G 3.3% loop exit 9158 8.4% 89.47% / 92.47% 230993449420 230.99G 17.7% opcode values nonequal (on trees) 9552 8.8% 85.86% / 91.56% 92785638348 92.79G 7.1% guessed loop iterations 10880 10.0% 94.45% / 94.78% 367779299495 367.78G 28.2% pointer (on trees) 18682 17.2% 80.01% / 94.69% 18291859871 18.29G 1.4% no prediction 20863 19.2% 40.36% / 83.66% 203021057312 203.02G 15.6% first match 33795 31.0% 91.59% / 92.17% 820741493723 820.74G 63.0% call 34820 32.0% 56.19% / 90.09% 62586683178 62.59G 4.8% DS theory 54257 49.8% 66.02% / 86.54% 280009272372 280.01G 21.5% combined 108915 100.0% 78.12% / 89.63% 1303771823407 1.30T 100.0% HEURISTICS BRANCHES (REL) HITRATE COVERAGE COVERAGE (REL) loop iv compare 23 0.0% 52.06% / 52.15% 8806901 8.81M 0.0% unconditional jump 103 0.2% 100.00% / 100.00% 491001 491.00K 0.0% guess loop iv compare 133 0.3% 97.78% / 97.81% 4279936888 4.28G 0.4% negative return 279 0.5% 97.87% / 99.23% 1062639875 1.06G 0.1% const return 362 0.7% 34.63% / 89.75% 380299097 380.30M 0.0% null return 396 0.8% 91.47% / 93.08% 3268678453 3.27G 0.3% continue 438 0.8% 33.36% / 82.86% 9985282412 9.99G 0.9% fail alloc 595 1.2% 62.18% / 100.00% 595 595.00 0.0% zero-sized array 677 1.3% 100.00% / 100.00% 112723789 112.72M 0.0% overflow 1282 2.5% 100.00% / 100.00% 175074149 175.07M 0.0% loop guard 1806 3.5% 51.80% / 84.49% 5230926398 5.23G 0.5% noreturn call 2326 4.5% 100.00% / 100.00% 7930483860 7.93G 0.7% loop iterations 2729 5.3% 75.43% / 75.43% 531785147496 531.79G 47.8% opcode values positive (on trees) 3125 6.1% 60.97% / 90.49% 15436912826 15.44G 1.4% guessed loop iterations 5195 10.1% 93.61% / 94.10% 209393449998 209.39G 18.8% loop exit 5339 10.4% 86.45% / 89.08% 81667429878 81.67G 7.3% early return (on trees) 6129 11.9% 53.73% / 85.87% 32874618464 32.87G 3.0% pointer (on trees) 6244 12.1% 69.66% / 87.21% 16710418134 16.71G 1.5% opcode values nonequal (on trees) 6595 12.8% 66.23% / 80.61% 71478573496 71.48G 6.4% no prediction 8332 16.2% 32.83% / 84.55% 136479915877 136.48G 12.3% call 15873 30.8% 63.45% / 92.77% 41601586641 41.60G 3.7% first match 16619 32.2% 81.34% / 81.68% 828056982571 828.06G 74.4% DS theory 26610 51.6% 64.93% / 85.46% 148555198747 148.56G 13.3% combined 51561 100.0% 73.20% / 82.54% 1113092097195 1.11T 100.0%