brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · 2d098b7 Raw
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