brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.8 KiB · 9d13714 Raw
183 lines · plain
1; RUN: llc -verify-machineinstrs -mtriple=aarch64 -mattr=+pauth -mattr=+fpac -code-model=tiny \2; RUN:   -relocation-model=pic < %s | FileCheck --check-prefixes=CHECK,NOTRAP %s3; RUN: llc -verify-machineinstrs -mtriple=aarch64 -mattr=+pauth              -code-model=tiny \4; RUN:   -relocation-model=pic < %s | FileCheck --check-prefixes=CHECK,TRAP %s5 6; RUN: llc -verify-machineinstrs -mtriple=aarch64 -mattr=+pauth -mattr=+fpac -code-model=tiny \7; RUN:   -relocation-model=pic -fast-isel < %s | FileCheck --check-prefixes=CHECK,NOTRAP %s8; RUN: llc -verify-machineinstrs -mtriple=aarch64 -mattr=+pauth              -code-model=tiny \9; RUN:   -relocation-model=pic -fast-isel < %s | FileCheck --check-prefixes=CHECK,TRAP %s10 11; RUN: llc -verify-machineinstrs -mtriple=aarch64 -mattr=+pauth -mattr=+fpac -code-model=tiny \12; RUN:   -relocation-model=pic -global-isel -global-isel-abort=1 < %s | FileCheck --check-prefixes=CHECK,NOTRAP %s13; RUN: llc -verify-machineinstrs -mtriple=aarch64 -mattr=+pauth              -code-model=tiny \14; RUN:   -relocation-model=pic -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_preemptable 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_preemptable 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_preemptable 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 133@lsrc = internal global i8 0, align 4134@ldst = internal global i8 0, align 4135@lptr = internal global ptr null, align 8136 137declare void @func(...)138 139define dso_preemptable ptr @externfuncaddr() {140; CHECK-LABEL: externfuncaddr:141; CHECK:       // %bb.0: // %entry142; CHECK-NEXT:    adr   x17, :got_auth:func143; NOTRAP-NEXT:   ldr   x0,  [x17]144; NOTRAP-NEXT:   autia x0,  x17145; TRAP-NEXT:     ldr   x16, [x17]146; TRAP-NEXT:     autia x16, x17147; TRAP-NEXT:     mov   x17, x16148; TRAP-NEXT:     xpaci x17149; TRAP-NEXT:     cmp   x16, x17150; TRAP-NEXT:     b.eq  .Lauth_success_6151; TRAP-NEXT:     brk   #0xc470152; TRAP-NEXT:   .Lauth_success_6:153; TRAP-NEXT:     mov   x0,  x16154; CHECK-NEXT:    ret155 156entry:157  ret ptr @func158}159 160define dso_preemptable ptr @localfuncaddr() {161; CHECK-LABEL: localfuncaddr:162; CHECK:       // %bb.0: // %entry163; CHECK-NEXT:    adr   x17, :got_auth:externfuncaddr164; NOTRAP-NEXT:   ldr   x0,  [x17]165; NOTRAP-NEXT:   autia x0,  x17166; TRAP-NEXT:     ldr   x16, [x17]167; TRAP-NEXT:     autia x16, x17168; TRAP-NEXT:     mov   x17, x16169; TRAP-NEXT:     xpaci x17170; TRAP-NEXT:     cmp   x16, x17171; TRAP-NEXT:     b.eq  .Lauth_success_7172; TRAP-NEXT:     brk   #0xc470173; TRAP-NEXT:   .Lauth_success_7:174; TRAP-NEXT:     mov   x0,  x16175; CHECK-NEXT:    ret176 177entry:178  ret ptr @externfuncaddr179}180 181!llvm.module.flags = !{!0}182!0 = !{i32 8, !"ptrauth-elf-got", i32 1}183