Go to file
Chandler Carruth 05ca5acc9e [PM] Introduce a devirtualization iteration layer for the new PM.
This is an orthogonal and separated layer instead of being embedded
inside the pass manager. While it adds a small amount of complexity, it
is fairly minimal and the composability and control seems worth the
cost.

The logic for this ends up being nicely isolated and targeted. It should
be easy to experiment with different iteration strategies wrapped around
the CGSCC bottom-up walk using this kind of facility.

The mechanism used to track devirtualization is the simplest one I came
up with. I think it handles most of the cases the existing iteration
machinery handles, but I haven't done a *very* in depth analysis. It
does however match the basic intended semantics, and we can tweak or
tune its exact behavior incrementally as necessary. One thing that we
may want to revisit is freshly building the value handle set on each
iteration. While I don't think this will be a significant cost (it is
strictly fewer value handles but more churn of value handes than the old
call graph), it is conceivable that we'll want a somewhat more clever
tracking mechanism. My hope is to layer that on as a follow up patch
with data supporting any implementation complexity it adds.

This code also provides for a basic count heuristic: if the number of
indirect calls decreases and the number of direct calls increases for
a given function in the SCC, we assume devirtualization is responsible.
This matches the heuristics currently used in the legacy pass manager.

Differential Revision: https://reviews.llvm.org/D23114

llvm-svn: 290665
2016-12-28 11:07:33 +00:00
clang [CodeGen] Unique constant CompoundLiterals. 2016-12-28 07:27:40 +00:00
clang-tools-extra [clang-tidy] Make 2 checks register matchers for C++ only. 2016-12-27 22:14:40 +00:00
compiler-rt Fix unit test broken by D27873. 2016-12-28 01:41:24 +00:00
debuginfo-tests New round of fixes for "Always compile debuginfo-tests for the host triple" 2014-10-18 23:47:59 +00:00
libclc Fix build since r286752. 2016-11-14 16:06:33 +00:00
libcxx Fix ABI incompatible C++03 nullptr_t 2016-12-28 09:50:23 +00:00
libcxxabi add cxa_demangle_fuzzer 2016-12-28 03:28:29 +00:00
libunwind EHABI: mark some functions as exported 2016-11-17 23:53:35 +00:00
lld [ELF] - Fix mistype in comment. NFC. 2016-12-25 06:49:17 +00:00
lldb Fix a couple of incorrect format string warnings 2016-12-22 19:15:07 +00:00
llgo [llgo] Remove support for LLVM attributes 2016-12-06 19:22:04 +00:00
llvm [PM] Introduce a devirtualization iteration layer for the new PM. 2016-12-28 11:07:33 +00:00
openmp Fix for the __kmpc_global_num_threads function to return the value of the __kmp_all_nth global var. 2016-12-21 21:20:20 +00:00
parallel-libs [Axccel] Remove -Wno-missing-braces in build 2016-12-19 21:34:07 +00:00
polly Update to isl-0.18-17-g2844ebf 2016-12-26 12:11:40 +00:00