[PATCH] D44397: [ThinLTO] Clear dllimport when setting dso_local

Rafael Avila de Espindola via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 12 10:56:30 PDT 2018


espindola created this revision.
espindola added reviewers: tejohnson, pcc, grimar.
Herald added subscribers: eraman, inglorion, mehdi_amini.

This is PR36686.

If a user of a library is LTOed with that library we take the opportunity to set dso_local, but we don't clear dllimport, which creates an invalid IR.


https://reviews.llvm.org/D44397

Files:
  lib/Transforms/Utils/FunctionImportUtils.cpp
  test/ThinLTO/X86/Inputs/dsolocal_dllimport.ll
  test/ThinLTO/X86/dsolocal_dllimport.ll


Index: test/ThinLTO/X86/dsolocal_dllimport.ll
===================================================================
--- /dev/null
+++ test/ThinLTO/X86/dsolocal_dllimport.ll
@@ -0,0 +1,16 @@
+; RUN: opt -module-summary %s -o %t1.bc
+; RUN: opt -module-summary %S/Inputs/dsolocal_dllimport.ll -o %t2.bc
+; RUN: llvm-lto2 run %t1.bc %t2.bc -o %t -r=%t1.bc,bar,px -r=%t1.bc,__imp_foo, -r=%t2.bc,foo -save-temps
+; RUN: llvm-dis < %t.1.3.import.bc | FileCheck %s
+
+; If a user (dllimport) is LTOed with a library, check that we replace dllimport with dso_local.
+
+; CHECK: declare dso_local void @foo()
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc19.11.0"
+define void @bar() {
+  call void @foo()
+  ret void
+}
+declare dllimport void @foo()
Index: test/ThinLTO/X86/Inputs/dsolocal_dllimport.ll
===================================================================
--- /dev/null
+++ test/ThinLTO/X86/Inputs/dsolocal_dllimport.ll
@@ -0,0 +1,5 @@
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc19.11.0"
+define dso_local dllexport i32 @foo() {
+  ret i32 42
+}
Index: lib/Transforms/Utils/FunctionImportUtils.cpp
===================================================================
--- lib/Transforms/Utils/FunctionImportUtils.cpp
+++ lib/Transforms/Utils/FunctionImportUtils.cpp
@@ -206,8 +206,11 @@
   // definition.
   if (GV.hasName()) {
     ValueInfo VI = ImportIndex.getValueInfo(GV.getGUID());
-    if (VI && VI.isDSOLocal())
+    if (VI && VI.isDSOLocal()) {
       GV.setDSOLocal(true);
+      if (GV.hasDLLImportStorageClass())
+        GV.setDLLStorageClass(GlobalValue::DefaultStorageClass);
+    }
   }
 
   bool DoPromote = false;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44397.138056.patch
Type: text/x-patch
Size: 1751 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180312/6599bd61/attachment.bin>


More information about the llvm-commits mailing list