llvm-project/llvm
Arthur Eubanks d9cbceb041 [CGSCC][Inliner] Handle new non-trivial edges in updateCGAndAnalysisManagerForPass
Previously the inliner did a bit of a hack by adding ref edges for all
new edges introduced by performing an inline before calling
updateCGAndAnalysisManagerForPass(). This was because
updateCGAndAnalysisManagerForPass() didn't handle new non-trivial call
edges.

This adds handling of non-trivial call edges to
updateCGAndAnalysisManagerForPass().  The inliner called
updateCGAndAnalysisManagerForFunctionPass() since it was handling adding
newly introduced edges (so updateCGAndAnalysisManagerForPass() would
only have to handle promotion), but now it needs to call
updateCGAndAnalysisManagerForCGSCCPass() since
updateCGAndAnalysisManagerForPass() is now handling the new call edges
and function passes cannot add new edges.

We follow the previous path of adding trivial ref edges then letting promotion
handle changing the ref edges to call edges and the CGSCC updates. So
this still does not allow adding call edges that result in an addition
of a non-trivial ref edge.

This is in preparation for better detecting devirtualization. Previously
since the inliner itself would add ref edges,
updateCGAndAnalysisManagerForPass() would think that promotion and thus
devirtualization had happened after any sort of inlining.

Reviewed By: asbirlea

Differential Revision: https://reviews.llvm.org/D91046
2020-11-11 13:43:49 -08:00
..
benchmarks
bindings [IR] add fn attr for no_stack_protector; prevent inlining on mismatch 2020-10-23 11:55:39 -07:00
cmake [CMake][ExecutionEngine] add HAVE_(DE)REGISTER_FRAME as a config.h macros 2020-11-10 13:09:44 -05:00
docs [docs] link new support policy from developer policy 2020-11-10 19:40:57 +00:00
examples [ORC] Break up C-API header Orc.h, and add JITEventListener support. 2020-10-19 01:59:04 -07:00
include Revert "[clang][cli] Port ObjCMTAction to new option parsing system" 2020-11-11 20:01:03 +00:00
lib [CGSCC][Inliner] Handle new non-trivial edges in updateCGAndAnalysisManagerForPass 2020-11-11 13:43:49 -08:00
projects
resources
runtimes [runtimes] Revert the libc++ __config_site change 2020-10-23 09:41:48 -04:00
test [AArch64][GlobalISel] Mark G_FCONSTANT as legal when there is full fp16 support 2020-11-11 13:25:11 -08:00
tools [NFC] Reformat llvm-elfabi 2020-11-11 10:41:51 -08:00
unittests [CGSCC][Inliner] Handle new non-trivial edges in updateCGAndAnalysisManagerForPass 2020-11-11 13:43:49 -08:00
utils Revert "[clang][cli] Port ObjCMTAction to new option parsing system" 2020-11-11 20:01:03 +00:00
.clang-format
.clang-tidy
.gitattributes
.gitignore
CMakeLists.txt Revert "[llvm] CMake: Force MSVC to read code as UTF-8" 2020-11-09 23:04:16 +01:00
CODE_OWNERS.TXT Update email addresses in CODE_OWNERS. 2020-10-26 18:51:04 -07:00
CREDITS.TXT
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.