summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/FunctionImport/inlineasm.ll
diff options
context:
space:
mode:
authorTeresa Johnson <tejohnson@google.com>2016-04-20 14:39:45 +0000
committerTeresa Johnson <tejohnson@google.com>2016-04-20 14:39:45 +0000
commitb35cc691ea93d9408f76736170359fd7ce604b53 (patch)
tree61d2c9ebba7b2a675bdc47ff212be9e44ef4df89 /llvm/test/Transforms/FunctionImport/inlineasm.ll
parent6eda85ac1fd9aed299eceed5a014c38a8d89da07 (diff)
downloadbcm5719-llvm-b35cc691ea93d9408f76736170359fd7ce604b53.tar.gz
bcm5719-llvm-b35cc691ea93d9408f76736170359fd7ce604b53.zip
[ThinLTO] Prevent importing of "llvm.used" values
Summary: This patch prevents importing from (and therefore exporting from) any module with a "llvm.used" local value. Local values need to be promoted and renamed when importing, and their presense on the llvm.used variable indicates that there are opaque uses that won't see the rename. One such example is a use in inline assembly. See also the discussion at: http://lists.llvm.org/pipermail/llvm-dev/2016-April/098047.html As part of this, move collectUsedGlobalVariables out of Transforms/Utils and into IR/Module so that it can be used more widely. There are several other places in LLVM that used copies of this code that can be cleaned up as a follow on NFC patch. Reviewers: joker.eph Subscribers: pcc, llvm-commits, joker.eph Differential Revision: http://reviews.llvm.org/D18986 llvm-svn: 266877
Diffstat (limited to 'llvm/test/Transforms/FunctionImport/inlineasm.ll')
-rw-r--r--llvm/test/Transforms/FunctionImport/inlineasm.ll19
1 files changed, 19 insertions, 0 deletions
diff --git a/llvm/test/Transforms/FunctionImport/inlineasm.ll b/llvm/test/Transforms/FunctionImport/inlineasm.ll
new file mode 100644
index 00000000000..d0516f14653
--- /dev/null
+++ b/llvm/test/Transforms/FunctionImport/inlineasm.ll
@@ -0,0 +1,19 @@
+; Do setup work for all below tests: generate bitcode and combined index
+; RUN: opt -module-summary %s -o %t.bc
+; RUN: opt -module-summary %p/Inputs/inlineasm.ll -o %t2.bc
+; RUN: llvm-lto -thinlto -o %t3 %t.bc %t2.bc
+
+; Attempt the import now, ensure below that file containing inline assembly
+; is not imported from. Otherwise we would need to promote its local variable
+; used in the inline assembly, which would not see the rename.
+; RUN: opt -function-import -summary-file %t3.thinlto.bc %t.bc -S 2>&1 | FileCheck %s --check-prefix=CHECK
+
+define i32 @main() #0 {
+entry:
+ %f = alloca i64, align 8
+ call void @foo(i64* %f)
+ ret i32 0
+}
+
+; CHECK: declare void @foo(i64*)
+declare void @foo(i64*) #1
OpenPOWER on IntegriCloud