[C++20][Modules][Serialization] Add an additional test case for #120277. (#126349)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / ptrauth-tagged-globals-pic.ll
blobee34b439daec7b50d6e965795016d0b5f16a8362
1 ; RUN: llc -global-isel=0 -fast-isel=0 -O0         --relocation-model=pic < %s \
2 ; RUN:   -mattr=+pauth -mattr=+fpac | FileCheck %s --check-prefixes=CHECK,DAGISEL,NOTRAP,DAGISEL-NOTRAP
3 ; RUN: llc -global-isel=0 -fast-isel=0 -O0         --relocation-model=pic < %s \
4 ; RUN:   -mattr=+pauth              | FileCheck %s --check-prefixes=CHECK,DAGISEL,TRAP,DAGISEL-TRAP
6 ; RUN: llc -global-isel=0 -fast-isel=1 -O0         --relocation-model=pic < %s \
7 ; RUN:   -mattr=+pauth -mattr=+fpac | FileCheck %s --check-prefixes=CHECK,DAGISEL,NOTRAP,DAGISEL-NOTRAP
8 ; RUN: llc -global-isel=0 -fast-isel=1 -O0         --relocation-model=pic < %s \
9 ; RUN:   -mattr=+pauth              | FileCheck %s --check-prefixes=CHECK,DAGISEL,TRAP,DAGISEL-TRAP
11 ; RUN: llc -global-isel=1 -global-isel-abort=1 -O0 --relocation-model=pic < %s \
12 ; RUN:   -mattr=+pauth -mattr=+fpac | FileCheck %s --check-prefixes=CHECK,GISEL,NOTRAP,GISEL-NOTRAP
13 ; RUN: llc -global-isel=1 -global-isel-abort=1 -O0 --relocation-model=pic < %s \
14 ; RUN:   -mattr=+pauth              | FileCheck %s --check-prefixes=CHECK,GISEL,TRAP,GISEL-TRAP
16 ;; Note: for FastISel, we fall back to SelectionDAG
18 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
19 target triple = "aarch64-unknown-linux-android"
21 @global = external global i32
22 declare void @func()
24 define ptr @global_addr() #0 {
25 ; CHECK-LABEL: global_addr:
26 ; CHECK:         adrp  x17, :got_auth:global
27 ; CHECK-NEXT:    add   x17, x17, :got_auth_lo12:global
28 ; NOTRAP-NEXT:   ldr   x0,  [x17]
29 ; NOTRAP-NEXT:   autda x0,  x17
30 ; TRAP-NEXT:     ldr   x16, [x17]
31 ; TRAP-NEXT:     autda x16, x17
32 ; TRAP-NEXT:     mov   x17, x16
33 ; TRAP-NEXT:     xpacd x17
34 ; TRAP-NEXT:     cmp   x16, x17
35 ; TRAP-NEXT:     b.eq  .Lauth_success_0
36 ; TRAP-NEXT:     brk   #0xc472
37 ; TRAP-NEXT:   .Lauth_success_0:
38 ; TRAP-NEXT:     mov   x0,  x16
39 ; CHECK-NEXT:    ret
41   ret ptr @global
44 define i32 @global_load() #0 {
45 ; CHECK-LABEL: global_load:
46 ; CHECK:         adrp  x17, :got_auth:global
47 ; CHECK-NEXT:    add   x17, x17, :got_auth_lo12:global
48 ; NOTRAP-NEXT:   ldr   x8,  [x17]
49 ; NOTRAP-NEXT:   autda x8,  x17
50 ; TRAP-NEXT:     ldr   x16, [x17]
51 ; TRAP-NEXT:     autda x16, x17
52 ; TRAP-NEXT:     mov   x17, x16
53 ; TRAP-NEXT:     xpacd x17
54 ; TRAP-NEXT:     cmp   x16, x17
55 ; TRAP-NEXT:     b.eq  .Lauth_success_1
56 ; TRAP-NEXT:     brk   #0xc472
57 ; TRAP-NEXT:   .Lauth_success_1:
58 ; TRAP-NEXT:     mov   x8,  x16
59 ; CHECK-NEXT:    ldr   w0,  [x8]
60 ; CHECK-NEXT:    ret
62   %load = load i32, ptr @global
63   ret i32 %load
66 define void @global_store() #0 {
67 ; CHECK-LABEL:       global_store:
68 ; CHECK:               adrp  x17, :got_auth:global
69 ; CHECK-NEXT:          add   x17, x17, :got_auth_lo12:global
70 ; GISEL-NOTRAP-NEXT:   ldr   x8,  [x17]
71 ; GISEL-NOTRAP-NEXT:   autda x8,  x17
72 ; GISEL-TRAP-NEXT:     ldr   x16, [x17]
73 ; GISEL-TRAP-NEXT:     autda x16, x17
74 ; DAGISEL-NOTRAP-NEXT: ldr   x9,  [x17]
75 ; DAGISEL-NOTRAP-NEXT: autda x9,  x17
76 ; DAGISEL-TRAP-NEXT:   ldr   x16, [x17]
77 ; DAGISEL-TRAP-NEXT:   autda x16, x17
78 ; TRAP-NEXT:           mov   x17, x16
79 ; TRAP-NEXT:           xpacd x17
80 ; TRAP-NEXT:           cmp   x16, x17
81 ; TRAP-NEXT:           b.eq  .Lauth_success_2
82 ; TRAP-NEXT:           brk   #0xc472
83 ; TRAP-NEXT:         .Lauth_success_2:
84 ; GISEL-TRAP-NEXT:     mov   x8,  x16
85 ; DAGISEL-TRAP-NEXT:   mov   x9,  x16
86 ; GISEL-NEXT:          str   wzr, [x8]
87 ; DAGISEL-NEXT:        mov   w8,  wzr
88 ; DAGISEL-NEXT:        str   w8,  [x9]
89 ; CHECK-NEXT:          ret
90   store i32 0, ptr @global
91   ret void
94 define ptr @func_addr() #0 {
95 ; CHECK-LABEL: func_addr:
96 ; CHECK:         adrp  x17, :got_auth:func
97 ; CHECK-NEXT:    add   x17, x17, :got_auth_lo12:func
98 ; NOTRAP-NEXT:   ldr   x0,  [x17]
99 ; NOTRAP-NEXT:   autia x0,  x17
100 ; TRAP-NEXT:     ldr   x16, [x17]
101 ; TRAP-NEXT:     autia x16, x17
102 ; TRAP-NEXT:     mov   x17, x16
103 ; TRAP-NEXT:     xpaci x17
104 ; TRAP-NEXT:     cmp   x16, x17
105 ; TRAP-NEXT:     b.eq  .Lauth_success_3
106 ; TRAP-NEXT:     brk   #0xc470
107 ; TRAP-NEXT:   .Lauth_success_3:
108 ; TRAP-NEXT:     mov   x0,  x16
109 ; CHECK-NEXT:    ret
111   ret ptr @func
114 attributes #0 = { "target-features"="+tagged-globals" }
116 !llvm.module.flags = !{!0}
117 !0 = !{i32 8, !"ptrauth-elf-got", i32 1}