forked from OSchip/llvm-project
fb109c42d9
The tests have been updated and I plan to move them from the MSSA directory up. Some end-to-end tests needed small adjustments. One difference to the legacy DSE is that legacy DSE also deletes trivially dead instructions that are unrelated to memory operations. Because MemorySSA-backed DSE just walks the MemorySSA, we only visit/check memory instructions. But removing unrelated dead instructions is not really DSE's job and other passes will clean up. One noteworthy change is in llvm/test/Transforms/Coroutines/ArgAddr.ll, but I think this comes down to legacy DSE not handling instructions that may throw correctly in that case. To cover this with MemorySSA-backed DSE, we need an update to llvm.coro.begin to treat it's return value to belong to the same underlying object as the passed pointer. There are some minor cases MemorySSA-backed DSE currently misses, e.g. related to atomic operations, but I think those can be implemented after the switch. This has been discussed on llvm-dev: http://lists.llvm.org/pipermail/llvm-dev/2020-August/144417.html For the MultiSource/SPEC2000/SPEC2006 the number of eliminated stores goes from ~17500 (legayc DSE) to ~26300 (MemorySSA-backed). More numbers and details in the thread on llvm-dev. Impact on CTMark: ``` Legacy Pass Manager exec instrs size-text O3 + 0.60% - 0.27% ReleaseThinLTO + 1.00% - 0.42% ReleaseLTO-g. + 0.77% - 0.33% RelThinLTO (link only) + 0.87% - 0.42% RelLO-g (link only) + 0.78% - 0.33% ``` http://llvm-compile-time-tracker.com/compare.php?from=3f22e96d95c71ded906c67067d75278efb0a2525&to=ae8be4642533ff03803967ee9d7017c0d73b0ee0&stat=instructions ``` New Pass Manager exec instrs. size-text O3 + 0.95% - 0.25% ReleaseThinLTO + 1.34% - 0.41% ReleaseLTO-g. + 1.71% - 0.35% RelThinLTO (link only) + 0.96% - 0.41% RelLO-g (link only) + 2.21% - 0.35% ``` http://195.201.131.214:8000/compare.php?from=3f22e96d95c71ded906c67067d75278efb0a2525&to=ae8be4642533ff03803967ee9d7017c0d73b0ee0&stat=instructions Reviewed By: asbirlea, xbolva00, nikic Differential Revision: https://reviews.llvm.org/D87163 |
||
---|---|---|
.. | ||
Inputs | ||
X86 | ||
2002-01-31-CallGraph.ll | ||
2002-02-24-InlineBrokePHINodes.ll | ||
2003-02-19-LoopInfoNestingBug.ll | ||
2004-08-16-PackedConstantInlineStore.ll | ||
2004-08-16-PackedGlobalConstant.ll | ||
2004-08-16-PackedSelect.ll | ||
2004-08-16-PackedSimple.ll | ||
2004-08-20-PackedControlFlow.ll | ||
2006-02-05-PassManager.ll | ||
2007-06-05-PassID.ll | ||
2007-06-28-PassManager.ll | ||
2007-09-10-PassManager.ll | ||
2008-02-14-PassManager.ll | ||
2008-06-04-FieldSizeInPacked.ll | ||
2008-10-06-RemoveDeadPass.ll | ||
2008-10-15-MissingSpace.ll | ||
2009-03-31-CallGraph.ll | ||
2009-06-05-no-implicit-float.ll | ||
2009-09-14-function-elements.ll | ||
2010-05-06-Printer.ll | ||
FileCheck-space.txt | ||
ResponseFile.ll | ||
attribute-comment.ll | ||
available-externally-lto.ll | ||
bcanalyzer-block-info.txt | ||
bcanalyzer-dump-option.txt | ||
can-execute.txt | ||
cfg-printer-branch-weights-percent.ll | ||
cfg-printer-branch-weights.ll | ||
cfg_deopt_unreach.ll | ||
cgscc-devirt-iteration.ll | ||
cgscc-disconnected-invalidation.ll | ||
cgscc-iterate-function-mutation.ll | ||
cgscc-libcall-update.ll | ||
cgscc-observe-devirt.ll | ||
cleanup-lcssa.ll | ||
codegenprepare-and-debug.ll | ||
constant-fold-gep-address-spaces.ll | ||
constant-fold-gep.ll | ||
cspgo-O2-pipeline.ll | ||
debugcounter-dce.ll | ||
debugcounter-earlycse.ll | ||
debugcounter-newgvn.ll | ||
debugcounter-predicateinfo.ll | ||
extract-alias.ll | ||
extract-linkonce.ll | ||
extract-weak-odr.ll | ||
extract.ll | ||
heat-colors-graphs.ll | ||
heat-colors-multigraph.ll | ||
invalid-commandline-option.ll | ||
invariant.group.ll | ||
lint.ll | ||
lit-globbing.ll | ||
lit-quoting.txt | ||
lit-unicode.txt | ||
llvm-nm-without-aliases.ll | ||
loop-deletion-printer.ll | ||
loop-pass-ordering.ll | ||
loop-pass-printer.ll | ||
loop-pm-invalidation.ll | ||
machine-size-remarks.ll | ||
module-pass-printer.ll | ||
new-pass-manager.ll | ||
new-pm-cspgo.ll | ||
new-pm-defaults.ll | ||
new-pm-lto-defaults.ll | ||
new-pm-pgo-O0.ll | ||
new-pm-pgo.ll | ||
new-pm-pr42726-cgscc.ll | ||
new-pm-thinlto-defaults.ll | ||
new-pm-thinlto-postlink-pgo-defaults.ll | ||
new-pm-thinlto-postlink-samplepgo-defaults.ll | ||
new-pm-thinlto-prelink-pgo-defaults.ll | ||
new-pm-thinlto-prelink-samplepgo-defaults.ll | ||
new-pm-time-trace.ll | ||
opt-O0-pipeline-enable-matrix.ll | ||
opt-O0-pipeline.ll | ||
opt-O2-pipeline.ll | ||
opt-O3-pipeline-enable-matrix.ll | ||
opt-O3-pipeline.ll | ||
opt-Os-pipeline.ll | ||
opt-bisect-helper.py | ||
opt-bisect-legacy-pass-manager.ll | ||
opt-hot-cold-split.ll | ||
opt-npm.ll | ||
opt-old-new-pm-passes.ll | ||
opt-override-denormal-fp-math-f32.ll | ||
opt-override-denormal-fp-math-mixed.ll | ||
opt-override-denormal-fp-math.ll | ||
opt-override-frame-pointer.ll | ||
opt-override-mcpu-mattr.ll | ||
opt-pipeline-vector-passes.ll | ||
opt-twice.ll | ||
optimization-remarks-inline.ll | ||
optimization-remarks-invalidation.ll | ||
optimization-remarks-lazy-bfi.ll | ||
optimize-inrange-gep.ll | ||
optimize-options.ll | ||
pass-pipeline-parsing.ll | ||
pass-pipelines.ll | ||
pipefail.txt | ||
pr32085.ll | ||
print-cfg-sccs.ll | ||
print-debug-counter.ll | ||
print-module-scope.ll | ||
print-slotindexes.ll | ||
printer.ll | ||
scalable-vector-array.ll | ||
scalable-vector-struct.ll | ||
scalable-vectors-core-ir.ll | ||
scc-deleted-printer.ll | ||
scc-pass-printer.ll | ||
size-remarks.ll | ||
spir_cc.ll | ||
statistic.ll | ||
time-passes.ll | ||
unroll-sroa.ll | ||
writing-to-stdout.ll |