brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · 950db5f Raw
155 lines · plain
1; RUN: llc -verify-machineinstrs -o - %s | FileCheck %s2; RUN: llc -verify-machineinstrs -global-isel -o - %s | FileCheck %s3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"5target triple = "arm64e-apple-iphoneos"6 7declare ptr @foo0(i32)8declare ptr @foo1()9 10declare void @llvm.objc.release(ptr)11declare ptr @llvm.objc.retainAutoreleasedReturnValue(ptr)12declare ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue(ptr)13 14declare void @foo2(ptr)15 16declare void @foo(i64, i64, i64)17 18define void @rv_marker_ptrauth_blraa(ptr %arg0, i64 %arg1) {19; CHECK-LABEL: rv_marker_ptrauth_blraa20; CHECK:         ldr [[ADDR:x[0-9]+]], [21; CHECK-NEXT:    blraa [[ADDR]], x122; CHECK-NEXT:    mov x29, x2923; CHECK-NEXT:    bl objc_retainAutoreleasedReturnValue24;25entry:26  %tmp0 = load ptr, ptr %arg027  %call0 = call ptr %tmp0() [ "ptrauth"(i32 0, i64 %arg1), "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]28  tail call void @foo2(ptr %call0)29  tail call void @llvm.objc.release(ptr %call0)30  ret void31}32 33define void @rv_marker_ptrauth_blraa_unsafeClaim(ptr %arg0, i64 %arg1) {34; CHECK-LABEL: rv_marker_ptrauth_blraa_unsafeClaim35; CHECK:         ldr [[ADDR:x[0-9]+]], [36; CHECK-NEXT:    blraa [[ADDR]], x137; CHECK-NEXT:    mov x29, x2938; CHECK-NEXT:    bl objc_unsafeClaimAutoreleasedReturnValue39;40entry:41  %tmp0 = load ptr, ptr %arg042  %call0 = call ptr %tmp0() [ "ptrauth"(i32 0, i64 %arg1), "clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]43  tail call void @foo2(ptr %call0)44  tail call void @llvm.objc.release(ptr %call0)45  ret void46}47 48define void @rv_marker_ptrauth_blraa_disc_imm16(ptr %arg0) {49; CHECK-LABEL: rv_marker_ptrauth_blraa_disc_imm1650; CHECK:         ldr [[ADDR:x[0-9]+]], [51; CHECK-NEXT:    mov x17, #4543152; CHECK-NEXT:    blrab [[ADDR]], x1753; CHECK-NEXT:    mov x29, x2954; CHECK-NEXT:    bl objc_retainAutoreleasedReturnValue55;56  %tmp0 = load ptr, ptr %arg057  %call0 = call ptr %tmp0() [ "ptrauth"(i32 1, i64 45431), "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]58  tail call void @foo2(ptr %call0)59  tail call void @llvm.objc.release(ptr %call0)60  ret void61}62 63define void @rv_marker_ptrauth_blraa_multiarg(ptr %arg0, i64 %arg1, i64 %a, i64 %b, i64 %c) {64; CHECK-LABEL: rv_marker_ptrauth_blraa_multiarg65; CHECK:         mov  [[TMP:x[0-9]+]], x166; CHECK-DAG:     ldr [[ADDR:x[0-9]+]]67; CHECK-DAG:     mov x0, x468; CHECK-DAG:     mov x1, x369; CHECK-NEXT:    blraa [[ADDR]], [[TMP]]70; CHECK-NEXT:    mov x29, x2971; CHECK-NEXT:   bl objc_retainAutoreleasedReturnValue72;73entry:74  %tmp0 = load ptr, ptr %arg075  %call0 = call ptr %tmp0(i64 %c, i64 %b, i64 %a) [ "ptrauth"(i32 0, i64 %arg1), "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]76  tail call void @foo2(ptr %call0)77  tail call void @llvm.objc.release(ptr %call0)78  ret void79}80 81define void @rv_marker_ptrauth_blrab(ptr %arg0, i64 %arg1) {82; CHECK-LABEL: rv_marker_ptrauth_blrab83; CHECK:         ldr [[ADDR:x[0-9]+]], [84; CHECK-NEXT:    blrab [[ADDR]], x185; CHECK-NEXT:   mov x29, x2986; CHECK-NEXT:   bl objc_retainAutoreleasedReturnValue87;88  %tmp0 = load ptr, ptr %arg089  %call0 = call ptr %tmp0() [ "ptrauth"(i32 1, i64 %arg1), "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]90  tail call void @foo2(ptr %call0)91  tail call void @llvm.objc.release(ptr %call0)92  ret void93}94 95define void @rv_marker_ptrauth_blrab_disc_imm16(ptr %arg0) {96; CHECK-LABEL: rv_marker_ptrauth_blrab_disc_imm1697; CHECK:         ldr [[ADDR:x[0-9]+]], [98; CHECK-NEXT:    mov x17, #25699; CHECK-NEXT:    blrab [[ADDR]], x17100; CHECK-NEXT:   mov x29, x29101; CHECK-NEXT:   bl objc_retainAutoreleasedReturnValue102;103  %tmp0 = load ptr, ptr %arg0104  %call0 = call ptr %tmp0() [ "ptrauth"(i32 1, i64 256), "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]105  tail call void @foo2(ptr %call0)106  tail call void @llvm.objc.release(ptr %call0)107  ret void108}109 110define void @rv_marker_ptrauth_blraaz(ptr %arg0) {111; CHECK-LABEL: rv_marker_ptrauth_blraaz112; CHECK:         ldr [[ADDR:x[0-9]+]], [113; CHECK-NEXT:    blraaz [[ADDR]]114; CHECK-NEXT:   mov x29, x29115; CHECK-NEXT:   bl objc_retainAutoreleasedReturnValue116;117  %tmp0 = load ptr, ptr %arg0118  %call0 = call ptr %tmp0() [ "ptrauth"(i32 0, i64 0), "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]119  tail call void @foo2(ptr %call0)120  tail call void @llvm.objc.release(ptr %call0)121  ret void122}123 124define void @rv_marker_ptrauth_blrabz(ptr %arg0) {125; CHECK-LABEL: rv_marker_ptrauth_blrabz126; CHECK:         ldr [[ADDR:x[0-9]+]], [127; CHECK-NEXT:    blrabz [[ADDR]]128; CHECK-NEXT:   mov x29, x29129; CHECK-NEXT:   bl objc_retainAutoreleasedReturnValue130;131  %tmp0 = load ptr, ptr %arg0132  %call0 = call ptr %tmp0() [ "ptrauth"(i32 1, i64 0), "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]133  tail call void @foo2(ptr %call0)134  tail call void @llvm.objc.release(ptr %call0)135  ret void136}137 138define void @rv_marker_ptrauth_blrabz_multiarg(ptr %arg0, i64 %a, i64 %b, i64 %c) {139; CHECK-LABEL: rv_marker_ptrauth_blrabz_multiarg140; CHECK:         mov  [[TMP:x[0-9]+]], x1141; CHECK-DAG:     ldr [[ADDR:x[0-9]+]], [142; CHECK-DAG:     mov x0, x3143; CHECK-DAG:     mov x1, x2144; CHECK-DAG:     mov x2, [[TMP]]145; CHECK-NEXT:    blrabz [[ADDR]]146; CHECK-NEXT:    mov x29, x29147; CHECK-NEXT:    bl objc_retainAutoreleasedReturnValue148;149  %tmp0 = load ptr, ptr %arg0150  %call0 = call ptr %tmp0(i64 %c, i64 %b, i64 %a) [ "ptrauth"(i32 1, i64 0), "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]151  tail call void @foo2(ptr %call0)152  tail call void @llvm.objc.release(ptr %call0)153  ret void154}155