summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2017-09-14 00:40:14 +0000
committerHans Wennborg <hans@hanshq.net>2017-09-14 00:40:14 +0000
commitae050afeb9b15d98b6a6b11de28431eee2bb0857 (patch)
tree24b945505bbc59b3af348d8b6a7a5cf84a2d7a24 /llvm/lib/Transforms
parent3568319679b295696fd1b76b9c4ec206496a0c8c (diff)
downloadbcm5719-llvm-ae050afeb9b15d98b6a6b11de28431eee2bb0857.tar.gz
bcm5719-llvm-ae050afeb9b15d98b6a6b11de28431eee2bb0857.zip
Revert r313157 "ThinLTO: Correctly follow aliasee references when dead stripping."
This broke Chromium's CFI build; see crbug.com/765004. > We were previously handling aliases during dead stripping by adding > the aliased global's "original name" GUID to the worklist. This will > lead to incorrect behaviour if the global has local linkage because > the original name GUID will not correspond to the global's GUID in > the summary. > > Because an alias is just another name for the global that it > references, there is no need to mark the referenced global as used, > or to follow references from any other copies of the global. So all > we need to do is to follow references from the aliasee's summary > instead of the alias. > > Differential Revision: https://reviews.llvm.org/D37789 llvm-svn: 313222
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/IPO/FunctionImport.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/IPO/FunctionImport.cpp b/llvm/lib/Transforms/IPO/FunctionImport.cpp
index b043687f898..da763b18d4d 100644
--- a/llvm/lib/Transforms/IPO/FunctionImport.cpp
+++ b/llvm/lib/Transforms/IPO/FunctionImport.cpp
@@ -488,14 +488,17 @@ void llvm::computeDeadSymbols(
while (!Worklist.empty()) {
auto VI = Worklist.pop_back_val();
for (auto &Summary : VI.getSummaryList()) {
- GlobalValueSummary *Base = Summary.get();
- if (auto *AS = dyn_cast<AliasSummary>(Base))
- Base = &AS->getAliasee();
- for (auto Ref : Base->refs())
+ for (auto Ref : Summary->refs())
visit(Ref);
- if (auto *FS = dyn_cast<FunctionSummary>(Base))
+ if (auto *FS = dyn_cast<FunctionSummary>(Summary.get()))
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();
OpenPOWER on IntegriCloud