diff options
author | Hans Wennborg <hans@hanshq.net> | 2017-09-14 00:40:14 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2017-09-14 00:40:14 +0000 |
commit | ae050afeb9b15d98b6a6b11de28431eee2bb0857 (patch) | |
tree | 24b945505bbc59b3af348d8b6a7a5cf84a2d7a24 /llvm/lib/Transforms | |
parent | 3568319679b295696fd1b76b9c4ec206496a0c8c (diff) | |
download | bcm5719-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.cpp | 13 |
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(); |