mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-12 14:06:36 +00:00
01fbf332f2
This changes getDomMemoryDef to check if a Current is a valid candidate for elimination before checking for reads. Before the change, we were spending a lot of compile-time in checking for read accesses for Current that might not even be removable. This patch flips the logic, so we skip Current if they cannot be removed before checking all their uses. This is much more efficient in practice. It also adds a more aggressive limit for checking partially overlapping stores. The main problem with overlapping stores is that we do not know if they will lead to elimination until seeing all of them. This patch limits adds a new limit for overlapping store candidates, which keeps the number of modified overlapping stores roughly the same. This is another substantial compile-time improvement (while also increasing the number of stores eliminated). Geomean -O3 -0.67%, ReleaseThinLTO -0.97%. http://llvm-compile-time-tracker.com/compare.php?from=0a929b6978a068af8ddb02d0d4714a2843dd8ba9&to=2e630629b43f64b60b282e90f0d96082fde2dacc&stat=instructions Reviewed By: asbirlea Differential Revision: https://reviews.llvm.org/D86487 |
||
---|---|---|
.. | ||
MSSA | ||
X86 | ||
2011-03-25-DSEMiscompile.ll | ||
2011-09-06-EndOfFunction.ll | ||
2011-09-06-MemCpy.ll | ||
2016-07-17-UseAfterFree.ll | ||
atomic.ll | ||
calloc-store.ll | ||
combined-partial-overwrites.ll | ||
const-pointers.ll | ||
crash.ll | ||
cs-cs-aliasing.ll | ||
debuginfo.ll | ||
DeleteThrowableInst.ll | ||
dominate.ll | ||
fence.ll | ||
free.ll | ||
inst-limits.ll | ||
int_sideeffect.ll | ||
invariant.start.ll | ||
launder.invariant.group.ll | ||
libcalls2.ll | ||
libcalls.ll | ||
lifetime.ll | ||
mda-with-dbg-values.ll | ||
memintrinsics.ll | ||
memset-missing-debugloc.ll | ||
merge-stores-big-endian.ll | ||
merge-stores.ll | ||
no-targetdata.ll | ||
operand-bundles.ll | ||
OverwriteStoreBegin.ll | ||
OverwriteStoreEnd.ll | ||
PartialStore2.ll | ||
PartialStore.ll | ||
pr11390.ll | ||
simple.ll | ||
tail-byval.ll |