Lines Matching +full:0 +full:x30
1 ; RUN: llc -mtriple arm64e-apple-darwin -o - %s -asm-verbose=0 \
4 ; RUN: llc -mtriple aarch64 -mattr=+pauth -o - %s -asm-verbose=0 \
7 ; RUN: llc -mtriple arm64e-apple-darwin -o - %s -asm-verbose=0 \
11 ; RUN: llc -mtriple aarch64 -mattr=+pauth -o - %s -asm-verbose=0 \
16 define i32 @test_call_ia_0(ptr %arg0) #0 {
18 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
20 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
24 ; ELF-NEXT: str x30, [sp, #-16]!
26 ; ELF-NEXT: ldr x30, [sp], #16
28 %tmp0 = call i32 %arg0() [ "ptrauth"(i32 0, i64 0) ]
32 define i32 @test_call_ib_0(ptr %arg0) #0 {
34 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
36 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
40 ; ELF-NEXT: str x30, [sp, #-16]!
42 ; ELF-NEXT: ldr x30, [sp], #16
44 %tmp0 = call i32 %arg0() [ "ptrauth"(i32 1, i64 0) ]
48 define i32 @test_tailcall_ia_0(ptr %arg0) #0 {
51 %tmp0 = tail call i32 %arg0() [ "ptrauth"(i32 0, i64 0) ]
55 define i32 @test_tailcall_ib_0(ptr %arg0) #0 {
58 %tmp0 = tail call i32 %arg0() [ "ptrauth"(i32 1, i64 0) ]
62 define i32 @test_call_ia_imm(ptr %arg0) #0 {
64 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
67 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
71 ; ELF-NEXT: str x30, [sp, #-16]!
74 ; ELF-NEXT: ldr x30, [sp], #16
76 %tmp0 = call i32 %arg0() [ "ptrauth"(i32 0, i64 42) ]
80 define i32 @test_call_ib_imm(ptr %arg0) #0 {
82 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
85 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
89 ; ELF-NEXT: str x30, [sp, #-16]!
92 ; ELF-NEXT: ldr x30, [sp], #16
98 define i32 @test_tailcall_ia_imm(ptr %arg0) #0 {
102 %tmp0 = tail call i32 %arg0() [ "ptrauth"(i32 0, i64 42) ]
106 define i32 @test_tailcall_ib_imm(ptr %arg0) #0 {
114 define i32 @test_call_ia_var(ptr %arg0, ptr %arg1) #0 {
116 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
119 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
123 ; ELF-NEXT: str x30, [sp, #-16]!
126 ; ELF-NEXT: ldr x30, [sp], #16
129 %tmp1 = call i32 %arg0() [ "ptrauth"(i32 0, i64 %tmp0) ]
133 define i32 @test_call_ib_var(ptr %arg0, ptr %arg1) #0 {
135 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
138 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
142 ; ELF-NEXT: str x30, [sp, #-16]!
145 ; ELF-NEXT: ldr x30, [sp], #16
152 define i32 @test_tailcall_ia_var(ptr %arg0, ptr %arg1) #0 {
157 %tmp1 = tail call i32 %arg0() [ "ptrauth"(i32 0, i64 %tmp0) ]
161 define i32 @test_tailcall_ib_var(ptr %arg0, ptr %arg1) #0 {
170 define void @test_tailcall_omit_mov_x16_x16(ptr %objptr) #0 {
187 tail call void %virt.func.signed(ptr %objptr) [ "ptrauth"(i32 0, i64 %virt.func.discr) ]
191 define i32 @test_call_omit_extra_moves(ptr %objptr) #0 {
193 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
194 ; ELF-NEXT: str x30, [sp, #-16]!
203 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
204 ; ELF-NEXT: ldr x30, [sp], #16
214 %call.result = tail call i32 %callee.signed(ptr %objptr) [ "ptrauth"(i32 0, i64 %callee.discr) ]
218 define i32 @test_call_ia_arg(ptr %arg0, i64 %arg1) #0 {
220 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
222 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
226 ; ELF-NEXT: str x30, [sp, #-16]!
228 ; ELF-NEXT: ldr x30, [sp], #16
230 %tmp0 = call i32 %arg0() [ "ptrauth"(i32 0, i64 %arg1) ]
234 define i32 @test_call_ib_arg(ptr %arg0, i64 %arg1) #0 {
236 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
238 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
242 ; ELF-NEXT: str x30, [sp, #-16]!
244 ; ELF-NEXT: ldr x30, [sp], #16
250 define i32 @test_tailcall_ia_arg(ptr %arg0, i64 %arg1) #0 {
253 %tmp0 = tail call i32 %arg0() [ "ptrauth"(i32 0, i64 %arg1) ]
257 define i32 @test_tailcall_ib_arg(ptr %arg0, i64 %arg1) #0 {
264 define i32 @test_call_ia_arg_ind(ptr %arg0, i64 %arg1) #0 {
266 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
269 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
273 ; ELF-NEXT: str x30, [sp, #-16]!
276 ; ELF-NEXT: ldr x30, [sp], #16
279 %tmp1 = call i32 %tmp0() [ "ptrauth"(i32 0, i64 %arg1) ]
283 define i32 @test_call_ib_arg_ind(ptr %arg0, i64 %arg1) #0 {
285 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
288 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
292 ; ELF-NEXT: str x30, [sp, #-16]!
295 ; ELF-NEXT: ldr x30, [sp], #16
302 define i32 @test_tailcall_ia_arg_ind(ptr %arg0, i64 %arg1) #0 {
307 %tmp1 = tail call i32 %tmp0() [ "ptrauth"(i32 0, i64 %arg1) ]
311 define i32 @test_tailcall_ib_arg_ind(ptr %arg0, i64 %arg1) #0 {
322 define i32 @test_direct_call() #0 {
324 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
326 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
330 ; ELF-NEXT: str x30, [sp, #-16]!
332 ; ELF-NEXT: ldr x30, [sp], #16
334 %tmp0 = call i32 ptrauth(ptr @f, i32 0, i64 42)() [ "ptrauth"(i32 0, i64 42) ]
338 define i32 @test_direct_tailcall(ptr %arg0) #0 {
344 %tmp0 = tail call i32 ptrauth(ptr @f, i32 0, i64 42)() [ "ptrauth"(i32 0, i64 42) ]
348 define i32 @test_direct_call_mismatch() #0 {
350 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
358 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
362 ; ELF-NEXT: str x30, [sp, #-16]!
370 ; ELF-NEXT: ldr x30, [sp], #16
372 %tmp0 = call i32 ptrauth(ptr @f, i32 0, i64 42)() [ "ptrauth"(i32 1, i64 42) ]
376 define i32 @test_direct_call_addr() #0 {
378 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
380 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
384 ; ELF-NEXT: str x30, [sp, #-16]!
386 ; ELF-NEXT: ldr x30, [sp], #16
388 %tmp0 = call i32 ptrauth(ptr @f, i32 1, i64 0, ptr @f.ref.ib.0.addr)() [ "ptrauth"(i32 1, i64 ptrtoint (ptr @f.ref.ib.0.addr to i64)) ]
392 define i32 @test_direct_call_addr_blend() #0 {
394 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
396 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
400 ; ELF-NEXT: str x30, [sp, #-16]!
402 ; ELF-NEXT: ldr x30, [sp], #16
409 define i32 @test_direct_call_addr_gep_different_index_types() #0 {
411 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
413 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
417 ; ELF-NEXT: str x30, [sp, #-16]!
419 ; ELF-NEXT: ldr x30, [sp], #16
421 %tmp0 = call i32 ptrauth(ptr @f, i32 1, i64 0, ptr getelementptr ({ ptr }, ptr @f_struct.ref.ib.0.addr, i64 0, i32 0))() [ "ptrauth"(i32 1, i64 ptrtoint (ptr getelementptr ({ ptr }, ptr @f_struct.ref.ib.0.addr, i32 0, i32 0) to i64)) ]
425 define i32 @test_direct_call_addr_blend_gep_different_index_types() #0 {
427 ; DARWIN-NEXT: stp x29, x30, [sp, #-16]!
429 ; DARWIN-NEXT: ldp x29, x30, [sp], #16
433 ; ELF-NEXT: str x30, [sp, #-16]!
435 ; ELF-NEXT: ldr x30, [sp], #16
437 %tmp0 = call i64 @llvm.ptrauth.blend(i64 ptrtoint (ptr getelementptr ({ ptr }, ptr @f_struct.ref.ib.123.addr, i32 0, i32 0) to i64), i64 123)
438 %tmp1 = call i32 ptrauth(ptr @f, i32 1, i64 123, ptr getelementptr ({ ptr }, ptr @f_struct.ref.ib.123.addr, i64 0, i32 0))() [ "ptrauth"(i32 1, i64 %tmp0) ]
443 @f.ref.ib.0.addr = external global ptr
444 @f_struct.ref.ib.0.addr = external global ptr
452 attributes #0 = { nounwind }