llvm-project/llvm
Florian Hahn 43aa7227df [DSE,MemorySSA] Check if Current is valid for elimination first.
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
2020-08-28 11:19:04 +01:00
..
benchmarks
bindings [OCaml] Remove add_constant_propagation 2020-08-27 09:30:21 -07:00
cmake [cmake] Don't build with -O3 -fPIC on Solaris/sparcv9 2020-08-28 11:40:34 +02:00
docs Add an unsigned shift base sanitizer 2020-08-27 19:50:10 -07:00
examples [examples] Fix dependencies for OrcV2Examples/LLJITWithThinLTOSummaries. 2020-08-25 11:51:20 -07:00
include [MC] [Win64EH] Avoid producing malformed xdata records 2020-08-28 09:05:36 +03:00
lib [DSE,MemorySSA] Check if Current is valid for elimination first. 2020-08-28 11:19:04 +01:00
projects
resources
runtimes [runtimes] Remove TOOLCHAIN_TOOLS specialization 2020-08-24 13:48:29 -07:00
test [DSE,MemorySSA] Check if Current is valid for elimination first. 2020-08-28 11:19:04 +01:00
tools [llvm-readobj] - Simplify the code that creates dumpers. NFCI. 2020-08-28 11:36:10 +03:00
unittests [unittests/Object] - Add testing for missing ELF formats. 2020-08-28 11:22:53 +03:00
utils [gn build] Port b1f4e5979b 2020-08-28 05:56:49 +00:00
.clang-format
.clang-tidy
.gitattributes
.gitignore
CMakeLists.txt [Support] On Windows, add optional support for {rpmalloc|snmalloc|mimalloc} 2020-08-27 11:09:46 -04:00
CODE_OWNERS.TXT Update my email address. 2020-08-21 10:15:26 -07:00
CREDITS.TXT Update my email address. 2020-08-21 10:15:26 -07:00
LICENSE.TXT
LLVMBuild.txt
README.txt
RELEASE_TESTERS.TXT
configure
llvm.spec.in

README.txt

The LLVM Compiler Infrastructure
================================

This directory and its subdirectories contain source code for LLVM,
a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you are writing a package for LLVM, see docs/Packaging.rst for our
suggestions.