summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2017-09-14 05:02:59 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2017-09-14 05:02:59 +0000
commitcfbd089237a6212c949b647136e4bd53c42f6e1c (patch)
tree9305e8809f40c33ef7bb6418d74802095331a729 /llvm/lib/Transforms
parentdf0b8438758478204156b74195787a9e2b35c23a (diff)
downloadbcm5719-llvm-cfbd089237a6212c949b647136e4bd53c42f6e1c.tar.gz
bcm5719-llvm-cfbd089237a6212c949b647136e4bd53c42f6e1c.zip
Reland r313157, "ThinLTO: Correctly follow aliasee references when dead stripping." which was reverted in r313222.
This reland includes a fix for the LowerTypeTests pass so that it looks past aliases when determining which type identifiers are live. Differential Revision: https://reviews.llvm.org/D37842 llvm-svn: 313229
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/IPO/FunctionImport.cpp17
-rw-r--r--llvm/lib/Transforms/IPO/LowerTypeTests.cpp10
2 files changed, 10 insertions, 17 deletions
diff --git a/llvm/lib/Transforms/IPO/FunctionImport.cpp b/llvm/lib/Transforms/IPO/FunctionImport.cpp
index da763b18d4d..9f20cbc6fed 100644
--- a/llvm/lib/Transforms/IPO/FunctionImport.cpp
+++ b/llvm/lib/Transforms/IPO/FunctionImport.cpp
@@ -324,10 +324,8 @@ static void ComputeImportForModule(
DEBUG(dbgs() << "Ignores Dead GUID: " << GVSummary.first << "\n");
continue;
}
- auto *Summary = GVSummary.second;
- if (auto *AS = dyn_cast<AliasSummary>(Summary))
- Summary = &AS->getAliasee();
- auto *FuncSummary = dyn_cast<FunctionSummary>(Summary);
+ auto *FuncSummary =
+ dyn_cast<FunctionSummary>(GVSummary.second->getBaseObject());
if (!FuncSummary)
// Skip import for global variables
continue;
@@ -488,17 +486,12 @@ void llvm::computeDeadSymbols(
while (!Worklist.empty()) {
auto VI = Worklist.pop_back_val();
for (auto &Summary : VI.getSummaryList()) {
- for (auto Ref : Summary->refs())
+ GlobalValueSummary *Base = Summary->getBaseObject();
+ for (auto Ref : Base->refs())
visit(Ref);
- if (auto *FS = dyn_cast<FunctionSummary>(Summary.get()))
+ if (auto *FS = dyn_cast<FunctionSummary>(Base))
for (auto Call : FS->calls())
visit(Call.first);
- if (auto *AS = dyn_cast<AliasSummary>(Summary.get())) {
- auto AliaseeGUID = AS->getAliasee().getOriginalName();
- ValueInfo AliaseeVI = Index.getValueInfo(AliaseeGUID);
- if (AliaseeVI)
- visit(AliaseeVI);
- }
}
}
Index.setWithGlobalValueDeadStripping();
diff --git a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
index 49cc14c5b59..027f426649c 100644
--- a/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
+++ b/llvm/lib/Transforms/IPO/LowerTypeTests.cpp
@@ -1703,12 +1703,12 @@ bool LowerTypeTestsModule::lower() {
for (auto &P : *ExportSummary) {
for (auto &S : P.second.SummaryList) {
- auto *FS = dyn_cast<FunctionSummary>(S.get());
- if (!FS || !ExportSummary->isGlobalValueLive(FS))
+ if (!ExportSummary->isGlobalValueLive(S.get()))
continue;
- for (GlobalValue::GUID G : FS->type_tests())
- for (Metadata *MD : MetadataByGUID[G])
- AddTypeIdUse(MD).IsExported = true;
+ if (auto *FS = dyn_cast<FunctionSummary>(S->getBaseObject()))
+ for (GlobalValue::GUID G : FS->type_tests())
+ for (Metadata *MD : MetadataByGUID[G])
+ AddTypeIdUse(MD).IsExported = true;
}
}
}
OpenPOWER on IntegriCloud