[ThinLTO] Compile time improvement to propagateAttributes
authorTeresa Johnson <tejohnson@google.com>
Thu, 30 Jul 2020 20:49:49 +0000 (13:49 -0700)
committerTeresa Johnson <tejohnson@google.com>
Fri, 31 Jul 2020 17:54:02 +0000 (10:54 -0700)
commit1479cdfe4ff603e7b0140dab3ca08ff095473cbd
treebe5cedf71ae53052a1d156d70fda3c10d25d8613
parentc068e9c8c123e7f8c8f3feb57245a012ccd09ccf
[ThinLTO] Compile time improvement to propagateAttributes

I found that propagateAttributes was ~23% of a thin link's run time
(almost 4x higher than the second hottest function). The main reason is
that it re-examines a global var each time it is referenced. This
becomes unnecessary once it is marked both non read only and non write
only. I added a set to avoid doing redundant work, which dropped the
runtime of that thin link by almost 15%.

I made a smaller efficiency improvement (no measurable impact) to skip
all summaries for a VI if the first copy is dead. I added an assert to
ensure that all copies are dead if any is. The code in
computeDeadSymbols marks all summaries for a VI as live. There is one
corner case where it was skipping marking an alias as live, that I
fixed. However, since the code earlier marked all copies of a preserved
GUID's VI as live, and each 'visit' marks all copies live, the only case
where this could make a difference is summaries that were marked live
when they were built initially, and that is only a few special compiler
generated symbols and inline assembly symbols, so it likely is never
provoked in practice.

Differential Revision: https://reviews.llvm.org/D84985
llvm/lib/IR/ModuleSummaryIndex.cpp
llvm/lib/Transforms/IPO/FunctionImport.cpp