brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · 141af91 Raw
117 lines · plain
1; RUN: llc -mtriple=aarch64-none-linux-gnu -global-isel=0 -fast-isel=0         -relocation-model=pic \2; RUN:   -mattr=+pauth -mattr=+fpac -o - %s | FileCheck --check-prefixes=CHECK,NOTRAP %s3; RUN: llc -mtriple=aarch64-none-linux-gnu -global-isel=0 -fast-isel=0         -relocation-model=pic \4; RUN:   -mattr=+pauth              -o - %s | FileCheck --check-prefixes=CHECK,TRAP %s5 6; RUN: llc -mtriple=aarch64-none-linux-gnu -global-isel=0 -fast-isel=1         -relocation-model=pic \7; RUN:   -mattr=+pauth -mattr=+fpac -o - %s | FileCheck --check-prefixes=CHECK,NOTRAP %s8; RUN: llc -mtriple=aarch64-none-linux-gnu -global-isel=0 -fast-isel=1         -relocation-model=pic \9; RUN:   -mattr=+pauth              -o - %s | FileCheck --check-prefixes=CHECK,TRAP %s10 11; RUN: llc -mtriple=aarch64-none-linux-gnu -global-isel=1 -global-isel-abort=1 -relocation-model=pic \12; RUN:   -mattr=+pauth -mattr=+fpac -o - %s | FileCheck --check-prefixes=CHECK,NOTRAP %s13; RUN: llc -mtriple=aarch64-none-linux-gnu -global-isel=1 -global-isel-abort=1 -relocation-model=pic \14; RUN:   -mattr=+pauth              -o - %s | FileCheck --check-prefixes=CHECK,TRAP %s15 16; RUN: llc -mtriple=aarch64-none-linux-gnu -code-model=tiny -mattr=+pauth -mattr=+fpac -o - %s | \17; RUN:   FileCheck --check-prefixes=CHECK-TINY,NOTRAP-TINY %s18; RUN: llc -mtriple=aarch64-none-linux-gnu -code-model=tiny -mattr=+pauth              -o - %s | \19; RUN:   FileCheck --check-prefixes=CHECK-TINY,TRAP-TINY %s20 21;; Note: for FastISel, we fall back to SelectionDAG22 23declare extern_weak dso_local i32 @var()24 25define ptr @foo() {26; The usual ADRP/ADD pair can't be used for a weak reference because it must27; evaluate to 0 if the symbol is undefined. We use a GOT entry for PIC28; otherwise a litpool entry.29  ret ptr @var30 31; CHECK-LABEL: foo:32; CHECK:         adrp  x17, :got_auth:var33; CHECK-NEXT:    add   x17, x17, :got_auth_lo12:var34; NOTRAP-NEXT:   ldr   x0,  [x17]35; NOTRAP-NEXT:   cbz   x0,  .Lundef_weak036; NOTRAP-NEXT:   autia x0,  x1737; TRAP-NEXT:     ldr   x16, [x17]38; TRAP-NEXT:     cbz   x16, .Lundef_weak039; TRAP-NEXT:     autia x16, x1740; CHECK-NEXT:  .Lundef_weak0:41; TRAP-NEXT:     mov   x17, x1642; TRAP-NEXT:     xpaci x1743; TRAP-NEXT:     cmp   x16, x1744; TRAP-NEXT:     b.eq  .Lauth_success_045; TRAP-NEXT:     brk   #0xc47046; TRAP-NEXT:   .Lauth_success_0:47; TRAP-NEXT:     mov   x0,  x1648; CHECK-NEXT:    ret49 50; CHECK-TINY-LABEL: foo:51; CHECK-TINY:         adr   x17, :got_auth:var52; NOTRAP-TINY-NEXT:   ldr   x0,  [x17]53; NOTRAP-TINY-NEXT:   cbz   x0,  .Lundef_weak054; NOTRAP-TINY-NEXT:   autia x0,  x1755; TRAP-TINY-NEXT:     ldr   x16, [x17]56; TRAP-TINY-NEXT:     cbz   x16, .Lundef_weak057; TRAP-TINY-NEXT:     autia x16, x1758; CHECK-TINY-NEXT:  .Lundef_weak0:59; TRAP-TINY-NEXT:     mov   x17, x1660; TRAP-TINY-NEXT:     xpaci x1761; TRAP-TINY-NEXT:     cmp   x16, x1762; TRAP-TINY-NEXT:     b.eq  .Lauth_success_063; TRAP-TINY-NEXT:     brk   #0xc47064; TRAP-TINY-NEXT:   .Lauth_success_0:65; TRAP-TINY-NEXT:     mov   x0,  x1666; CHECK-TINY-NEXT:    ret67}68 69@arr_var = extern_weak global [10 x i32]70 71define ptr @bar() {72  %addr = getelementptr [10 x i32], ptr @arr_var, i32 0, i32 573  ret ptr %addr74 75; CHECK-LABEL: bar:76; CHECK:         adrp  x17, :got_auth:arr_var77; CHECK-NEXT:    add   x17, x17, :got_auth_lo12:arr_var78; NOTRAP-NEXT:   ldr   x8,  [x17]79; NOTRAP-NEXT:   cbz   x8,  .Lundef_weak180; NOTRAP-NEXT:   autda x8,  x1781; TRAP-NEXT:     ldr   x16, [x17]82; TRAP-NEXT:     cbz   x16, .Lundef_weak183; TRAP-NEXT:     autda x16, x1784; CHECK-NEXT:  .Lundef_weak1:85; TRAP-NEXT:     mov   x17, x1686; TRAP-NEXT:     xpacd x1787; TRAP-NEXT:     cmp   x16, x1788; TRAP-NEXT:     b.eq  .Lauth_success_189; TRAP-NEXT:     brk   #0xc47290; TRAP-NEXT:   .Lauth_success_1:91; TRAP-NEXT:     mov   x8,  x1692; CHECK-NEXT:    add   x0,  x8, #2093; CHECK-NEXT:    ret94 95; CHECK-TINY-LABEL: bar:96; CHECK-TINY:         adr   x17, :got_auth:arr_var97; NOTRAP-TINY-NEXT:   ldr   x8,  [x17]98; NOTRAP-TINY-NEXT:   cbz   x8,  .Lundef_weak199; NOTRAP-TINY-NEXT:   autda x8,  x17100; TRAP-TINY-NEXT:     ldr   x16, [x17]101; TRAP-TINY-NEXT:     cbz   x16, .Lundef_weak1102; TRAP-TINY-NEXT:     autda x16, x17103; CHECK-TINY-NEXT:  .Lundef_weak1:104; TRAP-TINY-NEXT:     mov   x17, x16105; TRAP-TINY-NEXT:     xpacd x17106; TRAP-TINY-NEXT:     cmp   x16, x17107; TRAP-TINY-NEXT:     b.eq  .Lauth_success_1108; TRAP-TINY-NEXT:     brk   #0xc472109; TRAP-TINY-NEXT:   .Lauth_success_1:110; TRAP-TINY-NEXT:     mov   x8,  x16111; CHECK-TINY-NEXT:    add   x0,  x8, #20112; CHECK-TINY-NEXT:    ret113}114 115!llvm.module.flags = !{!0}116!0 = !{i32 8, !"ptrauth-elf-got", i32 1}117