From: Hans Wennborg Date: Thu, 14 Sep 2017 00:40:14 +0000 (+0000) Subject: Revert r313157 "ThinLTO: Correctly follow aliasee references when dead stripping." X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2ca4715d250736139b8fce4ce71f474050128a55;p=llvm 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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313222 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/IPO/FunctionImport.cpp b/lib/Transforms/IPO/FunctionImport.cpp index b043687f898..da763b18d4d 100644 --- a/lib/Transforms/IPO/FunctionImport.cpp +++ b/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(Base)) - Base = &AS->getAliasee(); - for (auto Ref : Base->refs()) + for (auto Ref : Summary->refs()) visit(Ref); - if (auto *FS = dyn_cast(Base)) + if (auto *FS = dyn_cast(Summary.get())) for (auto Call : FS->calls()) visit(Call.first); + if (auto *AS = dyn_cast(Summary.get())) { + auto AliaseeGUID = AS->getAliasee().getOriginalName(); + ValueInfo AliaseeVI = Index.getValueInfo(AliaseeGUID); + if (AliaseeVI) + visit(AliaseeVI); + } } } Index.setWithGlobalValueDeadStripping(); diff --git a/test/LTO/Resolution/X86/Inputs/dead-strip-alias.ll b/test/LTO/Resolution/X86/Inputs/dead-strip-alias.ll deleted file mode 100644 index 16154d2c45b..00000000000 --- a/test/LTO/Resolution/X86/Inputs/dead-strip-alias.ll +++ /dev/null @@ -1,4 +0,0 @@ -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -@external = global i8 42 diff --git a/test/LTO/Resolution/X86/dead-strip-alias.ll b/test/LTO/Resolution/X86/dead-strip-alias.ll deleted file mode 100644 index d009a484e4f..00000000000 --- a/test/LTO/Resolution/X86/dead-strip-alias.ll +++ /dev/null @@ -1,20 +0,0 @@ -; RUN: opt -module-summary -o %t %s -; RUN: opt -module-summary -o %t2 %S/Inputs/dead-strip-alias.ll -; RUN: llvm-lto2 run %t -r %t,main,px -r %t,alias,p -r %t,external, \ -; RUN: %t2 -r %t2,external,p \ -; RUN: -save-temps -o %t3 -; RUN: llvm-nm %t3.1 | FileCheck %s - -; CHECK: D external - -target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -@alias = alias i8*, i8** @internal - -@internal = internal global i8* @external -@external = external global i8 - -define i8** @main() { - ret i8** @alias -}