Hello. As mentioned in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79489#c1 early-return predictors is currenty not much precise. I decided to come up with GIMPLE_PREDICT statement that I put early and thus more precise numbers can be seen.
For SPEC 2017 we can improve the predictor from: HEURISTICS BRANCHES (REL) BR. HITRATE HITRATE COVERAGE COVERAGE (REL) predict.def (REL) early return (on trees) 17804 11.7% 63.54% 55.14% / 85.46% 38154989508 38.15G 5.4% 54% 1.1% to: early return (on trees) 3692 4.1% 79.55% 66.22% / 76.14% 15778842701 15.78G 2.4% 66% 0.2% For tests I had to change couple of tailrecursion tests, where recursion happens in tailr2 pass. It's not done in tailr1 due to GIMPLE_PREDICT statement. Apart from that I would like to add a sanity unit tests for values of predictors. And finally, I was asked by Honza to transform cold/hot label predictors to GIMPLE_PREDICT as well. Patch can bootstrap on ppc64le-redhat-linux and survives regression tests. Ready to be installed? Martin marxin (3): Come up with selftests for predict.c. Make early return predictor more precise. Rework cold and hot label attributes in predict.c. gcc/gimple-low.c | 3 + gcc/gimple-predict.h | 8 ++ gcc/gimplify.c | 26 +++++- gcc/predict.c | 103 +++++++++--------------- gcc/predict.def | 15 +--- gcc/selftest-run-tests.c | 1 + gcc/selftest.h | 1 + gcc/testsuite/gcc.dg/tree-ssa/attr-hotcold-2.c | 4 +- gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-1.c | 4 +- gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-2.c | 4 +- gcc/testsuite/gcc.dg/tree-ssa/tailrecursion-6.c | 4 +- gcc/tree-inline.c | 7 ++ 12 files changed, 95 insertions(+), 85 deletions(-) -- 2.13.0