forked from OSchip/llvm-project
8d0d1aa229
Summary: Some of our internal testing detected a major compile time regression which I've tracked down to: r278938 - Revert "Reassociate: Reprocess RedoInsts after each inst". It appears that processing long chains of reassociatable instructions causes non-linear (potentially exponential) growth in the number of times an instruction is revisited. For example, the included test revisits instructions 220 times in a 20-instruction test. It appears that r278938 reversed the order instructions were visited and that this is preventing scheduled revisits from being cancelled as a result of visiting the instructions naturally during normal processing. However, simply reversing the order also harmed the generated code. Upon closer inspection, it was discovered that revisits occurred in the opposite order to the first pass (Thanks to escha for spotting that). This patch makes the revisit order consistent with the first pass which allows more revisits to be cancelled. This does appear to have a small impact on the generated code in few cases but it significantly reduces compile-time. After this patch, our internal test that was most affected by the regression dropped from ~2 million revisits to ~4k resulting in Reassociate having 0.46% of the runtime it had before (99.54% improvement). Here's the summaries reported by lnt for the LLVM test-suite with --benchmarking-only: | metric | geomean before patch | geomean after patch | delta | | ----- | ----- | ----- | ----- | | compile time | 0.1956 | 0.1261 | -35.54% | | execution time | 0.3240 | 0.3237 | - | | code size | 7365.4459 | 7365.6079 | - | The results have a few wins and losses on compile-time, mostly in the +/- 2.5% range. There was one outlier though: | Performance Regressions - compile_time | Δ | Previous | Current | | MultiSource/Benchmarks/ASC_Sequoia/CrystalMk/CrystalMk | 9.82% | 2.0473 | 2.2483 | Reviewers: javed.absar, dberlin Reviewed By: dberlin Subscribers: kristof.beyls, llvm-commits Differential Revision: https://reviews.llvm.org/D45734 llvm-svn: 331381 |
||
---|---|---|
.. | ||
2002-05-15-AgressiveSubMove.ll | ||
2002-05-15-MissedTree.ll | ||
2002-05-15-SubReassociate.ll | ||
2002-07-09-DominanceProblem.ll | ||
2003-08-12-InfiniteLoop.ll | ||
2005-09-01-ArrayOutOfBounds.ll | ||
2006-04-27-ReassociateVector.ll | ||
2011-01-26-UseAfterFree.ll | ||
2012-05-08-UndefLeak.ll | ||
2012-06-08-InfiniteLoop.ll | ||
absorption.ll | ||
add_across_block_crash.ll | ||
basictest.ll | ||
canonicalize-neg-const.ll | ||
commute.ll | ||
crash.ll | ||
crash2.ll | ||
deadcode.ll | ||
erase_inst_made_change.ll | ||
factorize-again.ll | ||
fast-AgressiveSubMove.ll | ||
fast-ArrayOutOfBounds.ll | ||
fast-MissedTree.ll | ||
fast-ReassociateVector.ll | ||
fast-SubReassociate.ll | ||
fast-basictest.ll | ||
fast-fp-commute.ll | ||
fast-mightymul.ll | ||
fast-multistep.ll | ||
fp-commute.ll | ||
fp-expr.ll | ||
inverses.ll | ||
keep-debug-loc.ll | ||
long-chains.ll | ||
looptest.ll | ||
matching-binops.ll | ||
mightymul.ll | ||
min_int.ll | ||
mixed-fast-nonfast-fp.ll | ||
mulfactor.ll | ||
multistep.ll | ||
negation.ll | ||
negation1.ll | ||
no-op.ll | ||
optional-flags.ll | ||
otherops.ll | ||
pr12245.ll | ||
pr21205.ll | ||
pr28367.ll | ||
propagate-flags.ll | ||
reassoc-intermediate-fnegs.ll | ||
reassociate-deadinst.ll | ||
reassociate_dbgvalue_discard.ll | ||
repeats.ll | ||
secondary.ll | ||
shift-factor.ll | ||
shifttest.ll | ||
subtest.ll | ||
vaarg_movable.ll | ||
wrap-flags.ll | ||
xor_reassoc.ll |