[PATCH] D31444: LTO: call getRealLinkageName on IRNames before feeding to getGUID

Bob Haarman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 31 13:07:06 PDT 2017


inglorion updated this revision to Diff 93697.
inglorion added a comment.

simplified test per @pcc's suggestions (thanks!)


https://reviews.llvm.org/D31444

Files:
  lib/LTO/LTO.cpp
  test/ThinLTO/X86/Inputs/mangled-qux.ll
  test/ThinLTO/X86/mangled.ll


Index: test/ThinLTO/X86/mangled.ll
===================================================================
--- /dev/null
+++ test/ThinLTO/X86/mangled.ll
@@ -0,0 +1,16 @@
+; RUN: opt -thinlto-bc %s -o %t.obj
+; RUN: opt -thinlto-bc %S/Inputs/mangled-qux.ll -o %T/mangled-qux.obj
+; RUN: lld-link -out:%t.exe -entry:main %t.obj %T/mangled-qux.obj
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc19.0.24215"
+
+%"class.bar" = type { i32 (...)**, i8*, i8*, i8*, i32 }
+
+define i32 @main() {
+  ret i32 0
+}
+
+define available_externally zeroext i1 @"\01?x at bar@@UEBA_NXZ"(%"class.bar"* %this) unnamed_addr align 2 {
+  ret i1 false
+}
Index: test/ThinLTO/X86/Inputs/mangled-qux.ll
===================================================================
--- /dev/null
+++ test/ThinLTO/X86/Inputs/mangled-qux.ll
@@ -0,0 +1,28 @@
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc19.0.24215"
+
+%class.baz = type { %class.bar }
+%class.bar = type { i32 (...)** }
+
+$"\01?x at bar@@UEBA_NXZ" = comdat any
+
+$"\01??_7baz@@6B@" = comdat any
+
+$"\01??_Gbaz@@UEAAPEAXI at Z" = comdat any
+
+@"\01??_7baz@@6B@" = linkonce_odr unnamed_addr constant { [2 x i8*] } { [2 x i8*] [i8* bitcast (i8* (%class.baz*, i32)* @"\01??_Gbaz@@UEAAPEAXI at Z" to i8*), i8* bitcast (i1 (%class.bar*)* @"\01?x at bar@@UEBA_NXZ" to i8*)] }, comdat, !type !0, !type !1
+
+define void @"\01?qux@@YAXXZ"() local_unnamed_addr {
+  ret void
+}
+
+define linkonce_odr i8* @"\01??_Gbaz@@UEAAPEAXI at Z"(%class.baz* %this, i32 %should_call_delete) unnamed_addr comdat {
+  ret i8* null
+}
+
+define linkonce_odr zeroext i1 @"\01?x at bar@@UEBA_NXZ"(%class.bar* %this) unnamed_addr comdat {
+  ret i1 false
+}
+
+!0 = !{i64 0, !"?AVbar@@"}
+!1 = !{i64 0, !"?AVbaz@@"}
Index: lib/LTO/LTO.cpp
===================================================================
--- lib/LTO/LTO.cpp
+++ lib/LTO/LTO.cpp
@@ -971,7 +971,8 @@
           // IRName will be defined if we have seen the prevailing copy of
           // this value. If not, no need to preserve any ThinLTO copies.
           !Res.second.IRName.empty())
-        GUIDPreservedSymbols.insert(GlobalValue::getGUID(Res.second.IRName));
+        GUIDPreservedSymbols.insert(GlobalValue::getGUID(
+            GlobalValue::getRealLinkageName(Res.second.IRName)));
     }
 
     auto DeadSymbols =
@@ -990,10 +991,11 @@
       // partition (and we can't get the GUID).
       if (Res.second.IRName.empty())
         continue;
-      auto GUID = GlobalValue::getGUID(Res.second.IRName);
+      auto GUID = GlobalValue::getGUID(
+          GlobalValue::getRealLinkageName(Res.second.IRName));
       // Mark exported unless index-based analysis determined it to be dead.
       if (!DeadSymbols.count(GUID))
-        ExportedGUIDs.insert(GlobalValue::getGUID(Res.second.IRName));
+        ExportedGUIDs.insert(GUID);
     }
 
     auto isPrevailing = [&](GlobalValue::GUID GUID,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D31444.93697.patch
Type: text/x-patch
Size: 2966 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170331/0563d68e/attachment.bin>


More information about the llvm-commits mailing list