diff options
author | Teresa Johnson <tejohnson@google.com> | 2019-12-03 13:56:07 -0800 |
---|---|---|
committer | Teresa Johnson <tejohnson@google.com> | 2019-12-05 16:33:54 -0800 |
commit | 54a3c2a81e1a0ff970705008e9285ea3ada4ef3e (patch) | |
tree | 58cf5c7977c39448602bcda8ff84971d1330e6fb /llvm/lib/IR | |
parent | 2ec71ea7c74df20983031c6e1be07b14da0e9109 (diff) | |
download | bcm5719-llvm-54a3c2a81e1a0ff970705008e9285ea3ada4ef3e.tar.gz bcm5719-llvm-54a3c2a81e1a0ff970705008e9285ea3ada4ef3e.zip |
[ThinLTO] Add option to disable readonly/writeonly attribute propagation
Summary:
Add an option to allow the attribute propagation on the index to be
disabled, to allow a workaround for issues (such as that fixed by
D70977).
Also move the setting of the WithAttributePropagation flag on the index
into propagateAttributes(), and remove some old stale code that predated
this flag and cleared the maybe read/write only bits when we need to
disable the propagation (previously only when importing disabled, now
also when the new option disables it).
Reviewers: evgeny777, steven_wu
Subscribers: mehdi_amini, inglorion, hiraditya, dexonsmith, arphaman, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D70984
Diffstat (limited to 'llvm/lib/IR')
-rw-r--r-- | llvm/lib/IR/ModuleSummaryIndex.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/IR/ModuleSummaryIndex.cpp b/llvm/lib/IR/ModuleSummaryIndex.cpp index 5a4859e7c5d..a3bc14c22e2 100644 --- a/llvm/lib/IR/ModuleSummaryIndex.cpp +++ b/llvm/lib/IR/ModuleSummaryIndex.cpp @@ -15,6 +15,7 @@ #include "llvm/ADT/SCCIterator.h" #include "llvm/ADT/Statistic.h" #include "llvm/ADT/StringMap.h" +#include "llvm/Support/CommandLine.h" #include "llvm/Support/Path.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; @@ -26,6 +27,10 @@ STATISTIC(ReadOnlyLiveGVars, STATISTIC(WriteOnlyLiveGVars, "Number of live global variables marked write only"); +static cl::opt<bool> PropagateAttrs("propagate-attrs", cl::init(true), + cl::Hidden, + cl::desc("Propagate attributes in index")); + FunctionSummary FunctionSummary::ExternalNode = FunctionSummary::makeDummyFunctionSummary({}); @@ -157,6 +162,8 @@ static void propagateAttributesToRefs(GlobalValueSummary *S) { // See internalizeGVsAfterImport. void ModuleSummaryIndex::propagateAttributes( const DenseSet<GlobalValue::GUID> &GUIDPreservedSymbols) { + if (!PropagateAttrs) + return; for (auto &P : *this) for (auto &S : P.second.SummaryList) { if (!isGlobalValueLive(S.get())) @@ -183,6 +190,7 @@ void ModuleSummaryIndex::propagateAttributes( } propagateAttributesToRefs(S.get()); } + setWithAttributePropagation(); if (llvm::AreStatisticsEnabled()) for (auto &P : *this) if (P.second.SummaryList.size()) |