xref: /llvm-project/llvm/test/CodeGen/AArch64/hwasan-check-memaccess-fixedshadow.ll (revision 365bddf634993d5ea357e9715d8aacd7ee40c4b5)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2; RUN: llc < %s | FileCheck %s
3
4target triple = "aarch64--linux-android"
5
6define ptr @f1(ptr %x0, ptr %x1) {
7; CHECK-LABEL: f1:
8; CHECK:       // %bb.0:
9; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
10; CHECK-NEXT:    .cfi_def_cfa_offset 16
11; CHECK-NEXT:    .cfi_offset w30, -16
12; CHECK-NEXT:    bl __hwasan_check_x1_1_fixed_4398046511104
13; CHECK-NEXT:    mov x0, x1
14; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
15; CHECK-NEXT:    ret
16  call void @llvm.hwasan.check.memaccess.fixedshadow(ptr %x1, i32 1, i64 4398046511104)
17  ret ptr %x1
18}
19
20define ptr @f2(ptr %x0, ptr %x1) {
21; CHECK-LABEL: f2:
22; CHECK:       // %bb.0:
23; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
24; CHECK-NEXT:    .cfi_def_cfa_offset 16
25; CHECK-NEXT:    .cfi_offset w30, -16
26; CHECK-NEXT:    bl __hwasan_check_x0_2_fixed_4398046511104_short_v2
27; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
28; CHECK-NEXT:    ret
29  call void @llvm.hwasan.check.memaccess.shortgranules.fixedshadow(ptr %x0, i32 2, i64 4398046511104)
30  ret ptr %x0
31}
32
33define void @f3(ptr %x0, ptr %x1) {
34  ; 0x3ff0000 (kernel, match-all = 0xff)
35; CHECK-LABEL: f3:
36; CHECK:       // %bb.0:
37; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
38; CHECK-NEXT:    .cfi_def_cfa_offset 16
39; CHECK-NEXT:    .cfi_offset w30, -16
40; CHECK-NEXT:    bl __hwasan_check_x1_67043328_fixed_4398046511104
41; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
42; CHECK-NEXT:    ret
43  call void @llvm.hwasan.check.memaccess.fixedshadow(ptr %x1, i32 67043328, i64 4398046511104)
44  ret void
45}
46
47define void @f4(ptr %x0, ptr %x1) {
48  ; 0x1000010 (access-size-index = 0, is-write = 1, match-all = 0x0)
49; CHECK-LABEL: f4:
50; CHECK:       // %bb.0:
51; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill
52; CHECK-NEXT:    .cfi_def_cfa_offset 16
53; CHECK-NEXT:    .cfi_offset w30, -16
54; CHECK-NEXT:    bl __hwasan_check_x1_16777232_fixed_4398046511104_short_v2
55; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload
56; CHECK-NEXT:    ret
57  call void @llvm.hwasan.check.memaccess.shortgranules.fixedshadow(ptr %x1, i32 16777232, i64 4398046511104)
58  ret void
59}
60
61declare void @llvm.hwasan.check.memaccess.fixedshadow(ptr, i32, i64)
62declare void @llvm.hwasan.check.memaccess.shortgranules.fixedshadow(ptr, i32, i64)
63
64; CHECK:      .section .text.hot,"axG",@progbits,__hwasan_check_x0_2_fixed_4398046511104_short_v2,comdat
65; CHECK-NEXT: .type __hwasan_check_x0_2_fixed_4398046511104_short_v2,@function
66; CHECK-NEXT: .weak __hwasan_check_x0_2_fixed_4398046511104_short_v2
67; CHECK-NEXT: .hidden __hwasan_check_x0_2_fixed_4398046511104_short_v2
68; CHECK-NEXT: __hwasan_check_x0_2_fixed_4398046511104_short_v2:
69; CHECK-NEXT: sbfx x16, x0, #4, #52
70; CHECK-NEXT: mov x17, #4398046511104
71; CHECK-NEXT: ldrb w16, [x17, x16]
72; CHECK-NEXT: cmp x16, x0, lsr #56
73; CHECK-NEXT: b.ne .Ltmp0
74; CHECK-NEXT: .Ltmp1:
75; CHECK-NEXT: ret
76; CHECK-NEXT: .Ltmp0:
77; CHECK-NEXT: cmp w16, #15
78; CHECK-NEXT: b.hi .Ltmp2
79; CHECK-NEXT: and x17, x0, #0xf
80; CHECK-NEXT: add x17, x17, #3
81; CHECK-NEXT: cmp w16, w17
82; CHECK-NEXT: b.ls .Ltmp2
83; CHECK-NEXT: orr x16, x0, #0xf
84; CHECK-NEXT: ldrb w16, [x16]
85; CHECK-NEXT: cmp x16, x0, lsr #56
86; CHECK-NEXT: b.eq .Ltmp1
87; CHECK-NEXT: .Ltmp2:
88; CHECK-NEXT: stp x0, x1, [sp, #-256]!
89; CHECK-NEXT: stp x29, x30, [sp, #232]
90; CHECK-NEXT: mov x1, #2
91; CHECK-NEXT: adrp  x16, :got:__hwasan_tag_mismatch_v2
92; CHECK-NEXT: ldr x16, [x16, :got_lo12:__hwasan_tag_mismatch_v2]
93; CHECK-NEXT: br  x16
94
95
96; CHECK:      .section .text.hot,"axG",@progbits,__hwasan_check_x1_1_fixed_4398046511104,comdat
97; CHECK-NEXT: .type __hwasan_check_x1_1_fixed_4398046511104,@function
98; CHECK-NEXT: .weak __hwasan_check_x1_1_fixed_4398046511104
99; CHECK-NEXT: .hidden __hwasan_check_x1_1_fixed_4398046511104
100; CHECK-NEXT: __hwasan_check_x1_1_fixed_4398046511104:
101; CHECK-NEXT: sbfx x16, x1, #4, #52
102; CHECK-NEXT: mov x17, #4398046511104
103; CHECK-NEXT: ldrb w16, [x17, x16]
104; CHECK-NEXT: cmp x16, x1, lsr #56
105; CHECK-NEXT: b.ne .Ltmp3
106; CHECK-NEXT: .Ltmp4:
107; CHECK-NEXT: ret
108; CHECK-NEXT: .Ltmp3:
109; CHECK-NEXT: stp x0, x1, [sp, #-256]!
110; CHECK-NEXT: stp x29, x30, [sp, #232]
111; CHECK-NEXT: mov x0, x1
112; CHECK-NEXT: mov x1, #1
113; CHECK-NEXT: adrp  x16, :got:__hwasan_tag_mismatch
114; CHECK-NEXT: ldr x16, [x16, :got_lo12:__hwasan_tag_mismatch]
115; CHECK-NEXT: br  x16
116
117; CHECK:      __hwasan_check_x1_67043328_fixed_4398046511104:
118; CHECK-NEXT: sbfx x16, x1, #4, #52
119; CHECK-NEXT: mov x17, #4398046511104
120; CHECK-NEXT: ldrb w16, [x17, x16]
121; CHECK-NEXT: cmp x16, x1, lsr #56
122; CHECK-NEXT: b.ne .Ltmp5
123; CHECK-NEXT: .Ltmp6:
124; CHECK-NEXT: ret
125; CHECK-NEXT: .Ltmp5:
126; CHECK-NEXT: lsr x17, x1, #56
127; CHECK-NEXT: cmp x17, #255
128; CHECK-NEXT: b.eq .Ltmp6
129; CHECK-NEXT: stp x0, x1, [sp, #-256]!
130; CHECK-NEXT: stp x29, x30, [sp, #232]
131; CHECK-NEXT: mov x0, x1
132; CHECK-NEXT: mov x1, #0
133; CHECK-NEXT: b __hwasan_tag_mismatch
134
135; CHECK:      __hwasan_check_x1_16777232_fixed_4398046511104_short_v2:
136; CHECK-NEXT: sbfx	x16, x1, #4, #52
137; CHECK-NEXT: mov x17, #4398046511104
138; CHECK-NEXT: ldrb w16, [x17, x16]
139; CHECK-NEXT: cmp	x16, x1, lsr #56
140; CHECK-NEXT: b.ne	.Ltmp7
141; CHECK-NEXT: .Ltmp8:
142; CHECK-NEXT: ret
143; CHECK-NEXT: .Ltmp7:
144; CHECK-NEXT: lsr	x17, x1, #56
145; CHECK-NEXT: cmp	x17, #0
146; CHECK-NEXT: b.eq	.Ltmp8
147; CHECK-NEXT: cmp	w16, #15
148; CHECK-NEXT: b.hi	.Ltmp9
149; CHECK-NEXT: and	x17, x1, #0xf
150; CHECK-NEXT: cmp	w16, w17
151; CHECK-NEXT: b.ls	.Ltmp9
152; CHECK-NEXT: orr	x16, x1, #0xf
153; CHECK-NEXT: ldrb	w16, [x16]
154; CHECK-NEXT: cmp	x16, x1, lsr #56
155; CHECK-NEXT: b.eq	.Ltmp8
156; CHECK-NEXT: .Ltmp9:
157; CHECK-NEXT: stp	x0, x1, [sp, #-256]!
158; CHECK-NEXT: stp	x29, x30, [sp, #232]
159; CHECK-NEXT: mov	x0, x1
160; CHECK-NEXT: mov	x1, #16
161; CHECK-NEXT: adrp	x16, :got:__hwasan_tag_mismatch_v2
162; CHECK-NEXT: ldr	x16, [x16, :got_lo12:__hwasan_tag_mismatch_v2]
163; CHECK-NEXT: br	x16
164