summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/FunctionImport
diff options
context:
space:
mode:
authorTeresa Johnson <tejohnson@google.com>2019-01-31 16:00:15 +0000
committerTeresa Johnson <tejohnson@google.com>2019-01-31 16:00:15 +0000
commit992b53fd1617be518489d3f890afff5f14d7adae (patch)
treefb21cf55cbd5f1eca0dcf322f4befdc8fec0b627 /llvm/test/Transforms/FunctionImport
parent6be24274be7a7839068abbf66480d287d053887a (diff)
downloadbcm5719-llvm-992b53fd1617be518489d3f890afff5f14d7adae.tar.gz
bcm5719-llvm-992b53fd1617be518489d3f890afff5f14d7adae.zip
[ThinLTO] Rename COMDATs for COFF when promoting/renaming COMDAT leader
Summary: COFF requires that COMDAT name match that of the leader. When we promote and rename an internal leader in ThinLTO due to an import, ensure we subsequently rename the associated COMDAT. Similar to D31963 which did this during ThinLTO module splitting. Fixes PR40414. Reviewers: pcc, inglorion Subscribers: mehdi_amini, dexonsmith, dmajor, llvm-commits Differential Revision: https://reviews.llvm.org/D57395 llvm-svn: 352763
Diffstat (limited to 'llvm/test/Transforms/FunctionImport')
-rw-r--r--llvm/test/Transforms/FunctionImport/Inputs/comdat.ll10
-rw-r--r--llvm/test/Transforms/FunctionImport/comdat.ll32
2 files changed, 42 insertions, 0 deletions
diff --git a/llvm/test/Transforms/FunctionImport/Inputs/comdat.ll b/llvm/test/Transforms/FunctionImport/Inputs/comdat.ll
new file mode 100644
index 00000000000..1df6f25351e
--- /dev/null
+++ b/llvm/test/Transforms/FunctionImport/Inputs/comdat.ll
@@ -0,0 +1,10 @@
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc19.0.24215"
+
+define void @main() {
+entry:
+ call i8* @lwt_fun()
+ ret void
+}
+
+declare i8* @lwt_fun()
diff --git a/llvm/test/Transforms/FunctionImport/comdat.ll b/llvm/test/Transforms/FunctionImport/comdat.ll
new file mode 100644
index 00000000000..29e8cb538ab
--- /dev/null
+++ b/llvm/test/Transforms/FunctionImport/comdat.ll
@@ -0,0 +1,32 @@
+; Test to ensure that comdat is renamed consistently when comdat leader is
+; promoted and renamed due to an import. Required by COFF.
+
+; REQUIRES: x86-registered-target
+
+; RUN: opt -thinlto-bc -o %t1.bc %s
+; RUN: opt -thinlto-bc -o %t2.bc %S/Inputs/comdat.ll
+; RUN: llvm-lto2 run -save-temps -o %t3 %t1.bc %t2.bc \
+; RUN: -r %t1.bc,lwt_fun,plx \
+; RUN: -r %t2.bc,main,plx \
+; RUN: -r %t2.bc,lwt_fun,
+; RUN: llvm-dis -o - %t3.1.3.import.bc | FileCheck %s
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc19.0.24215"
+
+; CHECK: $lwt.llvm.[[HASH:[0-9]+]] = comdat any
+$lwt = comdat any
+
+; CHECK: @lwt_aliasee = private unnamed_addr global {{.*}}, comdat($lwt.llvm.[[HASH]])
+@lwt_aliasee = private unnamed_addr global [1 x i8*] [i8* null], comdat($lwt)
+
+; CHECK: @lwt.llvm.[[HASH]] = hidden unnamed_addr alias
+@lwt = internal unnamed_addr alias [1 x i8*], [1 x i8*]* @lwt_aliasee
+
+; Below function should get imported into other module, resulting in @lwt being
+; promoted and renamed.
+define i8* @lwt_fun() {
+ %1 = getelementptr inbounds [1 x i8*], [1 x i8*]* @lwt, i32 0, i32 0
+ %2 = load i8*, i8** %1
+ ret i8* %2
+}
OpenPOWER on IntegriCloud