summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/LowerTypeTests/Inputs/export-icall.yaml29
-rw-r--r--llvm/test/Transforms/LowerTypeTests/Inputs/exported-funcs.yaml22
-rw-r--r--llvm/test/Transforms/LowerTypeTests/export-alias.ll14
-rw-r--r--llvm/test/Transforms/LowerTypeTests/export-cross-dso-cfi.ll39
-rw-r--r--llvm/test/Transforms/LowerTypeTests/export-icall.ll2
-rw-r--r--llvm/test/Transforms/LowerTypeTests/export-symver.ll16
-rw-r--r--llvm/test/Transforms/LowerTypeTests/function-arm-thumb.ll6
-rw-r--r--llvm/test/Transforms/LowerTypeTests/function-ext.ll37
-rw-r--r--llvm/test/Transforms/LowerTypeTests/pr37625.ll10
9 files changed, 143 insertions, 32 deletions
diff --git a/llvm/test/Transforms/LowerTypeTests/Inputs/export-icall.yaml b/llvm/test/Transforms/LowerTypeTests/Inputs/export-icall.yaml
new file mode 100644
index 00000000000..b85cfd2eb00
--- /dev/null
+++ b/llvm/test/Transforms/LowerTypeTests/Inputs/export-icall.yaml
@@ -0,0 +1,29 @@
+---
+GlobalValueMap:
+ 42:
+ - Live: true
+ # guid("f"), guid("f2"), guid("f3"), guid("g"), guid("h"), guid("external"), guid("external_weak")
+ Refs: [14740650423002898831, 8471399308421654326, 4197650231481825559, 13146401226427987378, 8124147457056772133, 5224464028922159466, 5227079976482001346]
+ TypeTests: [14276520915468743435, 15427464259790519041] # guid("typeid1"), guid("typeid2")
+ 14740650423002898831: # guid("f")
+ - Linkage: 0 # external
+ Live: true
+ 8471399308421654326: # guid("f2")
+ - Linkage: 0 # external
+ Live: true
+ 4197650231481825559: # guid("f3")
+ - Linkage: 0 # external
+ Live: true
+ 13146401226427987378: # guid("g")
+ - Linkage: 0 # external
+ Live: true
+ 8124147457056772133: # guid("h")
+ - Linkage: 0 # external
+ Live: true
+ 5224464028922159466: # guid("external")
+ - Linkage: 0 # external
+ Live: true
+ 5227079976482001346: # guid("external_weak")
+ - Linkage: 9 # extern_weak
+ Live: true
+...
diff --git a/llvm/test/Transforms/LowerTypeTests/Inputs/exported-funcs.yaml b/llvm/test/Transforms/LowerTypeTests/Inputs/exported-funcs.yaml
new file mode 100644
index 00000000000..5457e36573b
--- /dev/null
+++ b/llvm/test/Transforms/LowerTypeTests/Inputs/exported-funcs.yaml
@@ -0,0 +1,22 @@
+---
+GlobalValueMap:
+ 42:
+ - Live: true
+ Refs: [16594175687743574550, 2415377257478301385] # guid("external_addrtaken"), guid("external_addrtaken2")
+ TypeTests: [14276520915468743435, 15427464259790519041] # guid("typeid1"), guid("typeid2")
+ 5224464028922159466: # guid("external")
+ - Linkage: 0 # external
+ Live: true
+ 16430208882958242304: # guid("external2")
+ - Linkage: 0 # external
+ Live: true
+ 16594175687743574550: # guid("external_addrtaken")
+ - Linkage: 0 # external
+ Live: true
+ 2415377257478301385: # guid("external_addrtaken2")
+ - Linkage: 0 # external
+ Live: true
+ 15859245615183425489: # guid("internal")
+ - Linkage: 7 # internal
+ Live: true
+...
diff --git a/llvm/test/Transforms/LowerTypeTests/export-alias.ll b/llvm/test/Transforms/LowerTypeTests/export-alias.ll
index 6e9c074068d..2ad8835475b 100644
--- a/llvm/test/Transforms/LowerTypeTests/export-alias.ll
+++ b/llvm/test/Transforms/LowerTypeTests/export-alias.ll
@@ -1,21 +1,21 @@
-; RUN: opt -S %s -lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/use-typeid1-typeid2.yaml | FileCheck %s
+; RUN: opt -S %s -lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/exported-funcs.yaml | FileCheck %s
;
-; CHECK: @alias1 = weak alias void (), void ()* @f
-; CHECK: @alias2 = hidden alias void (), void ()* @f
-; CHECK: declare !type !1 void @alias3()
+; CHECK: @alias1 = weak alias void (), void ()* @external_addrtaken
+; CHECK: @alias2 = hidden alias void (), void ()* @external_addrtaken
; CHECK-NOT: @alias3 = alias
+; CHECK-NOT: @not_present
target triple = "x86_64-unknown-linux"
!cfi.functions = !{!0, !2, !3}
!aliases = !{!4, !5, !6}
-!0 = !{!"f", i8 0, !1}
+!0 = !{!"external_addrtaken", i8 0, !1}
!1 = !{i64 0, !"typeid1"}
!2 = !{!"alias1", i8 1, !1}
; alias2 not included here, this could happen if the only reference to alias2
; is in a module compiled without cfi-icall
!3 = !{!"alias3", i8 1, !1}
-!4 = !{!"alias1", !"f", i8 0, i8 1}
-!5 = !{!"alias2", !"f", i8 1, i8 0}
+!4 = !{!"alias1", !"external_addrtaken", i8 0, i8 1}
+!5 = !{!"alias2", !"external_addrtaken", i8 1, i8 0}
!6 = !{!"alias3", !"not_present", i8 0, i8 0}
diff --git a/llvm/test/Transforms/LowerTypeTests/export-cross-dso-cfi.ll b/llvm/test/Transforms/LowerTypeTests/export-cross-dso-cfi.ll
new file mode 100644
index 00000000000..c3b01ffda21
--- /dev/null
+++ b/llvm/test/Transforms/LowerTypeTests/export-cross-dso-cfi.ll
@@ -0,0 +1,39 @@
+; Test that external functions have jumptable entries emitted even if they are
+; not address-taken when Cross-DSO CFI is used, but not otherwise.
+
+; RUN: opt -S -lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/exported-funcs.yaml < %s | FileCheck --check-prefixes=CHECK,CROSSDSO %s
+; RUN: cat %s | grep -v "llvm.module.flags" | opt -S -lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/exported-funcs.yaml | FileCheck --check-prefixes=CHECK,NORMAL %s
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+;;; Defined in the ThinLTO portion of the build (e.g. the summary)
+; CROSSDSO: declare !type !1 !type !2 hidden void @external.cfi()
+; NORMAL: declare !type !1 !type !2 void @external()
+declare !type !1 !type !2 void @external()
+
+; Don't emit jumptable entries for external declarations/non-external definitions
+; CHECK-NOT: @external2
+; CHECK-NOT: @internal
+
+;;; Defined in the regular LTO portion of the build
+; CROSSDSO: define hidden void @regularlto_external.cfi()
+; NORMAL: define void @regularlto_external()
+define void @regularlto_external() !type !1 !type !2 {
+ ret void
+}
+
+; CHECK: define internal void @regularlto_internal()
+define internal void @regularlto_internal() !type !1 !type !2 {
+ ret void
+}
+
+!cfi.functions = !{!0, !3, !4}
+!llvm.module.flags = !{!5}
+
+!0 = !{!"external", i8 0, !1, !2}
+!1 = !{i64 0, !"typeid1"}
+!2 = !{i64 0, i64 1234}
+!3 = !{!"external2", i8 1, !1, !2}
+!4 = !{!"internal", i8 0, !1, !2}
+!5 = !{i32 4, !"Cross-DSO CFI", i32 1}
diff --git a/llvm/test/Transforms/LowerTypeTests/export-icall.ll b/llvm/test/Transforms/LowerTypeTests/export-icall.ll
index 35971809deb..54c2f568b60 100644
--- a/llvm/test/Transforms/LowerTypeTests/export-icall.ll
+++ b/llvm/test/Transforms/LowerTypeTests/export-icall.ll
@@ -1,4 +1,4 @@
-; RUN: opt -S -lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/use-typeid1-typeid2.yaml -lowertypetests-write-summary=%t < %s | FileCheck %s
+; RUN: opt -S -lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/export-icall.yaml -lowertypetests-write-summary=%t < %s | FileCheck %s
; RUN: FileCheck --check-prefix=SUMMARY %s < %t
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
diff --git a/llvm/test/Transforms/LowerTypeTests/export-symver.ll b/llvm/test/Transforms/LowerTypeTests/export-symver.ll
index e2b58fcbb44..82ec9a9109a 100644
--- a/llvm/test/Transforms/LowerTypeTests/export-symver.ll
+++ b/llvm/test/Transforms/LowerTypeTests/export-symver.ll
@@ -1,16 +1,16 @@
-; RUN: opt -S %s -lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/use-typeid1-typeid2.yaml | FileCheck %s
+; RUN: opt -S %s -lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/exported-funcs.yaml | FileCheck %s
;
-; CHECK: module asm ".symver exported_and_symver, alias1"
-; CHECK-NOT: .symver exported
-; CHECK-NOT: .symver symver
+; CHECK: module asm ".symver external_addrtaken, alias1"
+; CHECK-NOT: .symver external_addrtaken2
+; CHECK-NOT: .symver not_exported
target triple = "x86_64-unknown-linux"
!cfi.functions = !{!0, !1}
!symvers = !{!3, !4}
-!0 = !{!"exported_and_symver", i8 2, !2}
-!1 = !{!"exported", i8 2, !2}
+!0 = !{!"external_addrtaken", i8 0, !2}
+!1 = !{!"external_addrtaken2", i8 0, !2}
!2 = !{i64 0, !"typeid1"}
-!3 = !{!"exported_and_symver", !"alias1"}
-!4 = !{!"symver", !"alias2"}
+!3 = !{!"external_addrtaken", !"alias1"}
+!4 = !{!"not_exported", !"alias2"}
diff --git a/llvm/test/Transforms/LowerTypeTests/function-arm-thumb.ll b/llvm/test/Transforms/LowerTypeTests/function-arm-thumb.ll
index 0e92207a27f..8a205f4e683 100644
--- a/llvm/test/Transforms/LowerTypeTests/function-arm-thumb.ll
+++ b/llvm/test/Transforms/LowerTypeTests/function-arm-thumb.ll
@@ -22,6 +22,12 @@ define void @h2() "target-features"="-thumb-mode" !type !1 {
ret void
}
+declare void @takeaddr(void()*, void()*, void()*, void()*, void()*)
+define void @addrtaken() {
+ call void @takeaddr(void()* @f1, void()* @g1, void()* @f2, void()* @g2, void()* @h2)
+ ret void
+}
+
!0 = !{i32 0, !"typeid1"}
!1 = !{i32 0, !"typeid2"}
diff --git a/llvm/test/Transforms/LowerTypeTests/function-ext.ll b/llvm/test/Transforms/LowerTypeTests/function-ext.ll
index f6191e9e09a..3b256e3d8a9 100644
--- a/llvm/test/Transforms/LowerTypeTests/function-ext.ll
+++ b/llvm/test/Transforms/LowerTypeTests/function-ext.ll
@@ -1,26 +1,41 @@
-; RUN: opt -S -lowertypetests -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck --check-prefix=X64 %s
-; RUN: opt -S -lowertypetests -mtriple=wasm32-unknown-unknown < %s | FileCheck --check-prefix=WASM32 %s
+; RUN: opt -S -lowertypetests -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck --check-prefixes=CHECK,X64 %s
+; RUN: opt -S -lowertypetests -mtriple=wasm32-unknown-unknown < %s | FileCheck --check-prefixes=CHECK,WASM32 %s
; Tests that we correctly handle external references, including the case where
; all functions in a bitset are external references.
; WASM32: private constant [0 x i8] zeroinitializer
-; WASM32: declare !type !{{[0-9]+}} void @foo()
-declare !type !0 void @foo()
+; WASM32: declare !type !{{[0-9]+}} !wasm.index !{{[0-9]+}} void @foo1()
+declare !type !0 void @foo1()
+; WASM32: declare !type !{{[0-9]+}} void @foo2()
+declare !type !1 void @foo2()
+; CHECK-LABEL: @bar
define i1 @bar(i8* %ptr) {
- ; X64: icmp eq i64 {{.*}}, ptrtoint (void ()* @[[JT:.*]] to i64)
- ; WASM32: ret i1 false
- %p = call i1 @llvm.type.test(i8* %ptr, metadata !"void")
+ ; CHECK: %[[ICMP:[0-9]+]] = icmp eq
+ ; CHECK: ret i1 %[[ICMP]]
+ %p = call i1 @llvm.type.test(i8* %ptr, metadata !"type1")
ret i1 %p
}
+; CHECK-LABEL: @baz
+define i1 @baz(i8* %ptr) {
+ ; CHECK: ret i1 false
+ %p = call i1 @llvm.type.test(i8* %ptr, metadata !"type2")
+ ret i1 %p
+}
+
+; CHECK-LABEL: @addrtaken
+define void()* @addrtaken() {
+ ; X64: ret void ()* @[[JT:.*]]
+ ret void()* @foo1
+}
+
declare i1 @llvm.type.test(i8* %ptr, metadata %bitset) nounwind readnone
-!0 = !{i64 0, !"void"}
-; WASM-NOT: !{i64 0}
-; WASM-NOT: !{i64 1}
+!0 = !{i64 0, !"type1"}
+!1 = !{i64 0, !"type2"}
; X64: define private void @[[JT]]() #{{.*}} align {{.*}} {
-; X64: call void asm sideeffect "jmp ${0:c}@plt\0Aint3\0Aint3\0Aint3\0A", "s"(void ()* @foo)
+; X64: call void asm sideeffect "jmp ${0:c}@plt\0Aint3\0Aint3\0Aint3\0A", "s"(void ()* @foo1)
diff --git a/llvm/test/Transforms/LowerTypeTests/pr37625.ll b/llvm/test/Transforms/LowerTypeTests/pr37625.ll
index e4b704eadb3..04952ed2b6d 100644
--- a/llvm/test/Transforms/LowerTypeTests/pr37625.ll
+++ b/llvm/test/Transforms/LowerTypeTests/pr37625.ll
@@ -1,14 +1,14 @@
-; RUN: opt -S -lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/use-typeid1-typeid2.yaml -lowertypetests-write-summary=%t < %s | FileCheck %s
+; RUN: opt -S -lowertypetests -lowertypetests-summary-action=export -lowertypetests-read-summary=%S/Inputs/exported-funcs.yaml -lowertypetests-write-summary=%t < %s | FileCheck %s
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
-declare !type !2 extern_weak void @h(i8)
+declare !type !2 extern_weak void @external_addrtaken(i8)
!cfi.functions = !{!0, !1}
-!0 = !{!"h", i8 2, !2}
-!1 = !{!"h", i8 0, !2}
+!0 = !{!"external_addrtaken", i8 2, !2}
+!1 = !{!"external_addrtaken", i8 0, !2}
!2 = !{i64 0, !"typeid1"}
-; CHECK-DAG: @h = alias void (i8), bitcast
+; CHECK-DAG: @external_addrtaken = alias void (i8), bitcast
OpenPOWER on IntegriCloud