1
- ; RUN: llc -mtriple arm64e-apple-darwin -mattr=+bti -asm-verbose=false -o - %s | FileCheck %s
2
- ; RUN: llc -mtriple arm64e-apple-darwin -mattr=+bti -global-isel -asm-verbose=false -o - %s | FileCheck %s
3
- ; RUN: llc -mtriple arm64e-apple-darwin -mattr=+bti -fast-isel -asm-verbose=false -o - %s | FileCheck %s
1
+ ; RUN: llc -mtriple arm64e-apple-darwin -mattr=+bti -asm-verbose=false \
2
+ ; RUN: -o - %s | FileCheck %s --check-prefixes=DARWIN,CHECK
3
+ ; RUN: llc -mtriple arm64e-apple-darwin -mattr=+bti -global-isel -asm-verbose=false \
4
+ ; RUN: -o - %s | FileCheck %s --check-prefixes=DARWIN,CHECK
5
+ ; RUN: llc -mtriple arm64e-apple-darwin -mattr=+bti -fast-isel -asm-verbose=false \
6
+ ; RUN: -o - %s | FileCheck %s --check-prefixes=DARWIN,CHECK
7
+ ; RUN: llc -mtriple aarch64-linux-gnu -mattr=+bti -mattr=+pauth -asm-verbose=false \
8
+ ; RUN: -o - %s | FileCheck %s --check-prefixes=ELF,CHECK
9
+ ; RUN: llc -mtriple aarch64-linux-gnu -mattr=+bti -mattr=+pauth -global-isel -asm-verbose=false \
10
+ ; RUN: -o - %s | FileCheck %s --check-prefixes=ELF,CHECK
11
+ ; RUN: llc -mtriple aarch64-linux-gnu -mattr=+bti -mattr=+pauth -fast-isel -asm-verbose=false \
12
+ ; RUN: -o - %s | FileCheck %s --check-prefixes=ELF,CHECK
4
13
5
14
; ptrauth tail-calls can only use x16/x17 with BTI.
6
15
7
- ; CHECK-LABEL: _test_tailcall_ia_0 :
16
+ ; CHECK-LABEL: test_tailcall_ia_0 :
8
17
; CHECK-NEXT: bti c
9
18
; CHECK-NEXT: mov x16, x0
10
19
; CHECK-NEXT: braaz x16
@@ -13,7 +22,7 @@ define i32 @test_tailcall_ia_0(i32 ()* %arg0) #0 {
13
22
ret i32 %tmp0
14
23
}
15
24
16
- ; CHECK-LABEL: _test_tailcall_ib_0 :
25
+ ; CHECK-LABEL: test_tailcall_ib_0 :
17
26
; CHECK-NEXT: bti c
18
27
; CHECK-NEXT: mov x16, x0
19
28
; CHECK-NEXT: brabz x16
@@ -22,7 +31,7 @@ define i32 @test_tailcall_ib_0(i32 ()* %arg0) #0 {
22
31
ret i32 %tmp0
23
32
}
24
33
25
- ; CHECK-LABEL: _test_tailcall_ia_imm :
34
+ ; CHECK-LABEL: test_tailcall_ia_imm :
26
35
; CHECK-NEXT: bti c
27
36
; CHECK-NEXT: mov x16, x0
28
37
; CHECK-NEXT: mov x17, #42
@@ -32,7 +41,7 @@ define i32 @test_tailcall_ia_imm(i32 ()* %arg0) #0 {
32
41
ret i32 %tmp0
33
42
}
34
43
35
- ; CHECK-LABEL: _test_tailcall_ib_imm :
44
+ ; CHECK-LABEL: test_tailcall_ib_imm :
36
45
; CHECK-NEXT: bti c
37
46
; CHECK-NEXT: mov x16, x0
38
47
; CHECK-NEXT: mov x17, #42
@@ -42,29 +51,37 @@ define i32 @test_tailcall_ib_imm(i32 ()* %arg0) #0 {
42
51
ret i32 %tmp0
43
52
}
44
53
45
- ; CHECK-LABEL: _test_tailcall_ia_var:
46
- ; CHECK-NEXT: bti c
47
- ; CHECK-NEXT: mov x16, x0
48
- ; CHECK-NEXT: ldr x0, [x1]
49
- ; CHECK-NEXT: braa x16, x0
54
+ ; CHECK-LABEL: test_tailcall_ia_var:
55
+ ; DARWIN-NEXT: bti c
56
+ ; DARWIN-NEXT: mov x16, x0
57
+ ; DARWIN-NEXT: ldr x0, [x1]
58
+ ; DARWIN-NEXT: braa x16, x0
59
+ ; ELF-NEXT: bti c
60
+ ; ELF-NEXT: ldr x1, [x1]
61
+ ; ELF-NEXT: mov x16, x0
62
+ ; ELF-NEXT: braa x16, x1
50
63
define i32 @test_tailcall_ia_var (i32 ()* %arg0 , i64* %arg1 ) #0 {
51
64
%tmp0 = load i64 , i64* %arg1
52
65
%tmp1 = tail call i32 %arg0 () [ "ptrauth" (i32 0 , i64 %tmp0 ) ]
53
66
ret i32 %tmp1
54
67
}
55
68
56
- ; CHECK-LABEL: _test_tailcall_ib_var:
57
- ; CHECK-NEXT: bti c
58
- ; CHECK-NEXT: mov x16, x0
59
- ; CHECK-NEXT: ldr x0, [x1]
60
- ; CHECK-NEXT: brab x16, x0
69
+ ; CHECK-LABEL: test_tailcall_ib_var:
70
+ ; DARWIN-NEXT: bti c
71
+ ; DARWIN-NEXT: mov x16, x0
72
+ ; DARWIN-NEXT: ldr x0, [x1]
73
+ ; DARWIN-NEXT: brab x16, x0
74
+ ; ELF-NEXT: bti c
75
+ ; ELF-NEXT: ldr x1, [x1]
76
+ ; ELF-NEXT: mov x16, x0
77
+ ; ELF-NEXT: brab x16, x1
61
78
define i32 @test_tailcall_ib_var (i32 ()* %arg0 , i64* %arg1 ) #0 {
62
79
%tmp0 = load i64 , i64* %arg1
63
80
%tmp1 = tail call i32 %arg0 () [ "ptrauth" (i32 1 , i64 %tmp0 ) ]
64
81
ret i32 %tmp1
65
82
}
66
83
67
- ; CHECK-LABEL: _test_tailcall_ia_arg :
84
+ ; CHECK-LABEL: test_tailcall_ia_arg :
68
85
; CHECK-NEXT: bti c
69
86
; CHECK-NEXT: mov x16, x0
70
87
; CHECK-NEXT: braa x16, x1
@@ -73,7 +90,7 @@ define i32 @test_tailcall_ia_arg(i32 ()* %arg0, i64 %arg1) #0 {
73
90
ret i32 %tmp0
74
91
}
75
92
76
- ; CHECK-LABEL: _test_tailcall_ib_arg :
93
+ ; CHECK-LABEL: test_tailcall_ib_arg :
77
94
; CHECK-NEXT: bti c
78
95
; CHECK-NEXT: mov x16, x0
79
96
; CHECK-NEXT: brab x16, x1
@@ -82,7 +99,7 @@ define i32 @test_tailcall_ib_arg(i32 ()* %arg0, i64 %arg1) #0 {
82
99
ret i32 %tmp0
83
100
}
84
101
85
- ; CHECK-LABEL: _test_tailcall_ia_arg_ind :
102
+ ; CHECK-LABEL: test_tailcall_ia_arg_ind :
86
103
; CHECK-NEXT: bti c
87
104
; CHECK-NEXT: ldr x16, [x0]
88
105
; CHECK-NEXT: braa x16, x1
@@ -92,7 +109,7 @@ define i32 @test_tailcall_ia_arg_ind(i32 ()** %arg0, i64 %arg1) #0 {
92
109
ret i32 %tmp1
93
110
}
94
111
95
- ; CHECK-LABEL: _test_tailcall_ib_arg_ind :
112
+ ; CHECK-LABEL: test_tailcall_ib_arg_ind :
96
113
; CHECK-NEXT: bti c
97
114
; CHECK-NEXT: ldr x16, [x0]
98
115
; CHECK-NEXT: brab x16, x1
0 commit comments