158 lines · plain
1; RUN: llc -verify-machineinstrs -o - -mtriple=aarch64-none-linux-gnu -mattr=+pauth -mattr=+fpac \2; RUN: -code-model=tiny < %s | FileCheck --check-prefixes=CHECK,NOTRAP %s3; RUN: llc -verify-machineinstrs -o - -mtriple=aarch64-none-linux-gnu -mattr=+pauth \4; RUN: -code-model=tiny < %s | FileCheck --check-prefixes=CHECK,TRAP %s5 6; RUN: llc -verify-machineinstrs -o - -mtriple=aarch64-none-linux-gnu -mattr=+pauth -mattr=+fpac \7; RUN: -code-model=tiny -fast-isel < %s | FileCheck --check-prefixes=CHECK,NOTRAP %s8; RUN: llc -verify-machineinstrs -o - -mtriple=aarch64-none-linux-gnu -mattr=+pauth \9; RUN: -code-model=tiny -fast-isel < %s | FileCheck --check-prefixes=CHECK,TRAP %s10 11; RUN: llc -verify-machineinstrs -o - -mtriple=aarch64-none-linux-gnu -mattr=+pauth -mattr=+fpac \12; RUN: -code-model=tiny -global-isel -global-isel-abort=1 < %s | FileCheck --check-prefixes=CHECK,NOTRAP %s13; RUN: llc -verify-machineinstrs -o - -mtriple=aarch64-none-linux-gnu -mattr=+pauth \14; RUN: -code-model=tiny -global-isel -global-isel-abort=1 < %s | FileCheck --check-prefixes=CHECK,TRAP %s15 16; Note fast-isel tests here will fall back to isel17 18@src = external local_unnamed_addr global [65536 x i8], align 119@dst = external global [65536 x i8], align 120@ptr = external local_unnamed_addr global ptr, align 821 22define dso_local void @foo1() {23; CHECK-LABEL: foo1:24; CHECK: // %bb.0: // %entry25; CHECK-NEXT: adr x17, :got_auth:src26; NOTRAP-NEXT: ldr x8, [x17]27; NOTRAP-NEXT: autda x8, x1728; TRAP-NEXT: ldr x16, [x17]29; TRAP-NEXT: autda x16, x1730; TRAP-NEXT: mov x17, x1631; TRAP-NEXT: xpacd x1732; TRAP-NEXT: cmp x16, x1733; TRAP-NEXT: b.eq .Lauth_success_034; TRAP-NEXT: brk #0xc47235; TRAP-NEXT: .Lauth_success_0:36; TRAP-NEXT: mov x8, x1637; CHECK-NEXT: ldrb w8, [x8]38; CHECK-NEXT: adr x17, :got_auth:dst39; NOTRAP-NEXT: ldr x9, [x17]40; NOTRAP-NEXT: autda x9, x1741; TRAP-NEXT: ldr x16, [x17]42; TRAP-NEXT: autda x16, x1743; TRAP-NEXT: mov x17, x1644; TRAP-NEXT: xpacd x1745; TRAP-NEXT: cmp x16, x1746; TRAP-NEXT: b.eq .Lauth_success_147; TRAP-NEXT: brk #0xc47248; TRAP-NEXT: .Lauth_success_1:49; TRAP-NEXT: mov x9, x1650; CHECK-NEXT: strb w8, [x9]51; CHECK-NEXT: ret52 53entry:54 %0 = load i8, ptr @src, align 155 store i8 %0, ptr @dst, align 156 ret void57}58 59define dso_local void @foo2() {60; CHECK-LABEL: foo2:61; CHECK: // %bb.0: // %entry62; CHECK-NEXT: adr x17, :got_auth:ptr63; NOTRAP-NEXT: ldr x8, [x17]64; NOTRAP-NEXT: autda x8, x1765; TRAP-NEXT: ldr x16, [x17]66; TRAP-NEXT: autda x16, x1767; TRAP-NEXT: mov x17, x1668; TRAP-NEXT: xpacd x1769; TRAP-NEXT: cmp x16, x1770; TRAP-NEXT: b.eq .Lauth_success_271; TRAP-NEXT: brk #0xc47272; TRAP-NEXT: .Lauth_success_2:73; TRAP-NEXT: mov x8, x1674; CHECK-NEXT: adr x17, :got_auth:dst75; NOTRAP-NEXT: ldr x9, [x17]76; NOTRAP-NEXT: autda x9, x1777; TRAP-NEXT: ldr x16, [x17]78; TRAP-NEXT: autda x16, x1779; TRAP-NEXT: mov x17, x1680; TRAP-NEXT: xpacd x1781; TRAP-NEXT: cmp x16, x1782; TRAP-NEXT: b.eq .Lauth_success_383; TRAP-NEXT: brk #0xc47284; TRAP-NEXT: .Lauth_success_3:85; TRAP-NEXT: mov x9, x1686; CHECK-NEXT: str x9, [x8]87; CHECK-NEXT: ret88 89entry:90 store ptr @dst, ptr @ptr, align 891 ret void92}93 94define dso_local void @foo3() {95; CHECK-LABEL: foo3:96; CHECK: // %bb.0: // %entry97; CHECK-NEXT: adr x17, :got_auth:src98; NOTRAP-NEXT: ldr x8, [x17]99; NOTRAP-NEXT: autda x8, x17100; TRAP-NEXT: ldr x16, [x17]101; TRAP-NEXT: autda x16, x17102; TRAP-NEXT: mov x17, x16103; TRAP-NEXT: xpacd x17104; TRAP-NEXT: cmp x16, x17105; TRAP-NEXT: b.eq .Lauth_success_4106; TRAP-NEXT: brk #0xc472107; TRAP-NEXT: .Lauth_success_4:108; TRAP-NEXT: mov x8, x16109; CHECK-NEXT: ldrb w8, [x8]110; CHECK-NEXT: adr x17, :got_auth:ptr111; NOTRAP-NEXT: ldr x9, [x17]112; NOTRAP-NEXT: autda x9, x17113; TRAP-NEXT: ldr x16, [x17]114; TRAP-NEXT: autda x16, x17115; TRAP-NEXT: mov x17, x16116; TRAP-NEXT: xpacd x17117; TRAP-NEXT: cmp x16, x17118; TRAP-NEXT: b.eq .Lauth_success_5119; TRAP-NEXT: brk #0xc472120; TRAP-NEXT: .Lauth_success_5:121; TRAP-NEXT: mov x9, x16122; CHECK-NEXT: ldr x9, [x9]123; CHECK-NEXT: strb w8, [x9]124; CHECK-NEXT: ret125 126entry:127 %0 = load i8, ptr @src, align 1128 %1 = load ptr, ptr @ptr, align 8129 store i8 %0, ptr %1, align 1130 ret void131}132 133declare void @func(...)134 135define dso_local ptr @externfuncaddr() {136; CHECK-LABEL: externfuncaddr:137; CHECK: // %bb.0: // %entry138; CHECK-NEXT: adr x17, :got_auth:func139; NOTRAP-NEXT: ldr x0, [x17]140; NOTRAP-NEXT: autia x0, x17141; TRAP-NEXT: ldr x16, [x17]142; TRAP-NEXT: autia x16, x17143; TRAP-NEXT: mov x17, x16144; TRAP-NEXT: xpaci x17145; TRAP-NEXT: cmp x16, x17146; TRAP-NEXT: b.eq .Lauth_success_6147; TRAP-NEXT: brk #0xc470148; TRAP-NEXT: .Lauth_success_6:149; TRAP-NEXT: mov x0, x16150; CHECK-NEXT: ret151 152entry:153 ret ptr @func154}155 156!llvm.module.flags = !{!0}157!0 = !{i32 8, !"ptrauth-elf-got", i32 1}158