]> granicus.if.org Git - llvm/commitdiff
Revert r313157 "ThinLTO: Correctly follow aliasee references when dead stripping."
authorHans Wennborg <hans@hanshq.net>
Thu, 14 Sep 2017 00:40:14 +0000 (00:40 +0000)
committerHans Wennborg <hans@hanshq.net>
Thu, 14 Sep 2017 00:40:14 +0000 (00:40 +0000)
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

lib/Transforms/IPO/FunctionImport.cpp
test/LTO/Resolution/X86/Inputs/dead-strip-alias.ll [deleted file]
test/LTO/Resolution/X86/dead-strip-alias.ll [deleted file]

index b043687f898925ba8c96a519ecd57309a4ed3040..da763b18d4d461b6e7897ab90a0799a04f8afab3 100644 (file)
@@ -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();
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 (file)
index 16154d2..0000000
+++ /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 (file)
index d009a48..0000000
+++ /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
-}