1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -msan-check-access-address=0 -S -passes=msan 2>&1 | FileCheck %s --implicit-check-not="call void @__msan_warning"
3 ; RUN: opt < %s -msan-check-access-address=1 -S -passes=msan 2>&1 | FileCheck %s --check-prefixes=ADDR --implicit-check-not="call void @__msan_warning"
4 ; RUN: opt < %s -msan-check-access-address=0 -msan-track-origins=1 -S -passes=msan 2>&1 | FileCheck %s --check-prefixes=ORIGINS --implicit-check-not="call void @__msan_warning"
6 target triple = "x86_64-unknown-linux-gnu"
7 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
9 define void @load.v1i32(ptr %p) sanitize_memory {
10 ; CHECK-LABEL: @load.v1i32(
11 ; CHECK-NEXT: call void @llvm.donothing()
12 ; CHECK-NEXT: [[TMP1:%.*]] = load <1 x i32>, ptr [[P:%.*]], align 4
13 ; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
14 ; CHECK-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
15 ; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
16 ; CHECK-NEXT: [[_MSLD:%.*]] = load <1 x i32>, ptr [[TMP4]], align 4
17 ; CHECK-NEXT: ret void
19 ; ADDR-LABEL: @load.v1i32(
20 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
21 ; ADDR-NEXT: call void @llvm.donothing()
22 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
23 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0:![0-9]+]]
25 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3:[0-9]+]]
26 ; ADDR-NEXT: unreachable
28 ; ADDR-NEXT: [[TMP4:%.*]] = load <1 x i32>, ptr [[P:%.*]], align 4
29 ; ADDR-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64
30 ; ADDR-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
31 ; ADDR-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
32 ; ADDR-NEXT: [[_MSLD:%.*]] = load <1 x i32>, ptr [[TMP7]], align 4
35 ; ORIGINS-LABEL: @load.v1i32(
36 ; ORIGINS-NEXT: call void @llvm.donothing()
37 ; ORIGINS-NEXT: [[TMP1:%.*]] = load <1 x i32>, ptr [[P:%.*]], align 4
38 ; ORIGINS-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
39 ; ORIGINS-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
40 ; ORIGINS-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
41 ; ORIGINS-NEXT: [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
42 ; ORIGINS-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
43 ; ORIGINS-NEXT: [[_MSLD:%.*]] = load <1 x i32>, ptr [[TMP4]], align 4
44 ; ORIGINS-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 4
45 ; ORIGINS-NEXT: ret void
47 load <1 x i32>, ptr %p
51 define void @load.v2i32(ptr %p) sanitize_memory {
52 ; CHECK-LABEL: @load.v2i32(
53 ; CHECK-NEXT: call void @llvm.donothing()
54 ; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i32>, ptr [[P:%.*]], align 8
55 ; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
56 ; CHECK-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
57 ; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
58 ; CHECK-NEXT: [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP4]], align 8
59 ; CHECK-NEXT: ret void
61 ; ADDR-LABEL: @load.v2i32(
62 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
63 ; ADDR-NEXT: call void @llvm.donothing()
64 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
65 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
67 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
68 ; ADDR-NEXT: unreachable
70 ; ADDR-NEXT: [[TMP4:%.*]] = load <2 x i32>, ptr [[P:%.*]], align 8
71 ; ADDR-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64
72 ; ADDR-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
73 ; ADDR-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
74 ; ADDR-NEXT: [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
77 ; ORIGINS-LABEL: @load.v2i32(
78 ; ORIGINS-NEXT: call void @llvm.donothing()
79 ; ORIGINS-NEXT: [[TMP1:%.*]] = load <2 x i32>, ptr [[P:%.*]], align 8
80 ; ORIGINS-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
81 ; ORIGINS-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
82 ; ORIGINS-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
83 ; ORIGINS-NEXT: [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
84 ; ORIGINS-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
85 ; ORIGINS-NEXT: [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP4]], align 8
86 ; ORIGINS-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 8
87 ; ORIGINS-NEXT: ret void
89 load <2 x i32>, ptr %p
93 define void @load.v4i32(ptr %p) sanitize_memory {
94 ; CHECK-LABEL: @load.v4i32(
95 ; CHECK-NEXT: call void @llvm.donothing()
96 ; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr [[P:%.*]], align 16
97 ; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
98 ; CHECK-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
99 ; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
100 ; CHECK-NEXT: [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP4]], align 16
101 ; CHECK-NEXT: ret void
103 ; ADDR-LABEL: @load.v4i32(
104 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
105 ; ADDR-NEXT: call void @llvm.donothing()
106 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
107 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
109 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
110 ; ADDR-NEXT: unreachable
112 ; ADDR-NEXT: [[TMP4:%.*]] = load <4 x i32>, ptr [[P:%.*]], align 16
113 ; ADDR-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64
114 ; ADDR-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
115 ; ADDR-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
116 ; ADDR-NEXT: [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
117 ; ADDR-NEXT: ret void
119 ; ORIGINS-LABEL: @load.v4i32(
120 ; ORIGINS-NEXT: call void @llvm.donothing()
121 ; ORIGINS-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr [[P:%.*]], align 16
122 ; ORIGINS-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
123 ; ORIGINS-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
124 ; ORIGINS-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
125 ; ORIGINS-NEXT: [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
126 ; ORIGINS-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
127 ; ORIGINS-NEXT: [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP4]], align 16
128 ; ORIGINS-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 16
129 ; ORIGINS-NEXT: ret void
131 load <4 x i32>, ptr %p
135 define void @load.v8i32(ptr %p) sanitize_memory {
136 ; CHECK-LABEL: @load.v8i32(
137 ; CHECK-NEXT: call void @llvm.donothing()
138 ; CHECK-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr [[P:%.*]], align 32
139 ; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
140 ; CHECK-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
141 ; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
142 ; CHECK-NEXT: [[_MSLD:%.*]] = load <8 x i32>, ptr [[TMP4]], align 32
143 ; CHECK-NEXT: ret void
145 ; ADDR-LABEL: @load.v8i32(
146 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
147 ; ADDR-NEXT: call void @llvm.donothing()
148 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
149 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
151 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
152 ; ADDR-NEXT: unreachable
154 ; ADDR-NEXT: [[TMP4:%.*]] = load <8 x i32>, ptr [[P:%.*]], align 32
155 ; ADDR-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64
156 ; ADDR-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
157 ; ADDR-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
158 ; ADDR-NEXT: [[_MSLD:%.*]] = load <8 x i32>, ptr [[TMP7]], align 32
159 ; ADDR-NEXT: ret void
161 ; ORIGINS-LABEL: @load.v8i32(
162 ; ORIGINS-NEXT: call void @llvm.donothing()
163 ; ORIGINS-NEXT: [[TMP1:%.*]] = load <8 x i32>, ptr [[P:%.*]], align 32
164 ; ORIGINS-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
165 ; ORIGINS-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
166 ; ORIGINS-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
167 ; ORIGINS-NEXT: [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
168 ; ORIGINS-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
169 ; ORIGINS-NEXT: [[_MSLD:%.*]] = load <8 x i32>, ptr [[TMP4]], align 32
170 ; ORIGINS-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 32
171 ; ORIGINS-NEXT: ret void
173 load <8 x i32>, ptr %p
177 define void @load.v16i32(ptr %p) sanitize_memory {
178 ; CHECK-LABEL: @load.v16i32(
179 ; CHECK-NEXT: call void @llvm.donothing()
180 ; CHECK-NEXT: [[TMP1:%.*]] = load <16 x i32>, ptr [[P:%.*]], align 64
181 ; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
182 ; CHECK-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
183 ; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
184 ; CHECK-NEXT: [[_MSLD:%.*]] = load <16 x i32>, ptr [[TMP4]], align 64
185 ; CHECK-NEXT: ret void
187 ; ADDR-LABEL: @load.v16i32(
188 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
189 ; ADDR-NEXT: call void @llvm.donothing()
190 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
191 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
193 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
194 ; ADDR-NEXT: unreachable
196 ; ADDR-NEXT: [[TMP4:%.*]] = load <16 x i32>, ptr [[P:%.*]], align 64
197 ; ADDR-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64
198 ; ADDR-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
199 ; ADDR-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
200 ; ADDR-NEXT: [[_MSLD:%.*]] = load <16 x i32>, ptr [[TMP7]], align 64
201 ; ADDR-NEXT: ret void
203 ; ORIGINS-LABEL: @load.v16i32(
204 ; ORIGINS-NEXT: call void @llvm.donothing()
205 ; ORIGINS-NEXT: [[TMP1:%.*]] = load <16 x i32>, ptr [[P:%.*]], align 64
206 ; ORIGINS-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
207 ; ORIGINS-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
208 ; ORIGINS-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
209 ; ORIGINS-NEXT: [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
210 ; ORIGINS-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
211 ; ORIGINS-NEXT: [[_MSLD:%.*]] = load <16 x i32>, ptr [[TMP4]], align 64
212 ; ORIGINS-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 64
213 ; ORIGINS-NEXT: ret void
215 load <16 x i32>, ptr %p
220 define void @store.v1i32(ptr %p) sanitize_memory {
221 ; CHECK-LABEL: @store.v1i32(
222 ; CHECK-NEXT: call void @llvm.donothing()
223 ; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
224 ; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
225 ; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
226 ; CHECK-NEXT: store <1 x i32> zeroinitializer, ptr [[TMP3]], align 4
227 ; CHECK-NEXT: store <1 x i32> zeroinitializer, ptr [[P]], align 4
228 ; CHECK-NEXT: ret void
230 ; ADDR-LABEL: @store.v1i32(
231 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
232 ; ADDR-NEXT: call void @llvm.donothing()
233 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
234 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
236 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
237 ; ADDR-NEXT: unreachable
239 ; ADDR-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P:%.*]] to i64
240 ; ADDR-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 87960930222080
241 ; ADDR-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
242 ; ADDR-NEXT: store <1 x i32> zeroinitializer, ptr [[TMP6]], align 4
243 ; ADDR-NEXT: store <1 x i32> zeroinitializer, ptr [[P]], align 4
244 ; ADDR-NEXT: ret void
246 ; ORIGINS-LABEL: @store.v1i32(
247 ; ORIGINS-NEXT: call void @llvm.donothing()
248 ; ORIGINS-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
249 ; ORIGINS-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
250 ; ORIGINS-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
251 ; ORIGINS-NEXT: [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416
252 ; ORIGINS-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr
253 ; ORIGINS-NEXT: store <1 x i32> zeroinitializer, ptr [[TMP3]], align 4
254 ; ORIGINS-NEXT: store <1 x i32> zeroinitializer, ptr [[P]], align 4
255 ; ORIGINS-NEXT: ret void
257 store <1 x i32> zeroinitializer, ptr %p
261 define void @store.v2i32(ptr %p) sanitize_memory {
262 ; CHECK-LABEL: @store.v2i32(
263 ; CHECK-NEXT: call void @llvm.donothing()
264 ; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
265 ; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
266 ; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
267 ; CHECK-NEXT: store <2 x i32> zeroinitializer, ptr [[TMP3]], align 8
268 ; CHECK-NEXT: store <2 x i32> zeroinitializer, ptr [[P]], align 8
269 ; CHECK-NEXT: ret void
271 ; ADDR-LABEL: @store.v2i32(
272 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
273 ; ADDR-NEXT: call void @llvm.donothing()
274 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
275 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
277 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
278 ; ADDR-NEXT: unreachable
280 ; ADDR-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P:%.*]] to i64
281 ; ADDR-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 87960930222080
282 ; ADDR-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
283 ; ADDR-NEXT: store <2 x i32> zeroinitializer, ptr [[TMP6]], align 8
284 ; ADDR-NEXT: store <2 x i32> zeroinitializer, ptr [[P]], align 8
285 ; ADDR-NEXT: ret void
287 ; ORIGINS-LABEL: @store.v2i32(
288 ; ORIGINS-NEXT: call void @llvm.donothing()
289 ; ORIGINS-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
290 ; ORIGINS-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
291 ; ORIGINS-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
292 ; ORIGINS-NEXT: [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416
293 ; ORIGINS-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr
294 ; ORIGINS-NEXT: store <2 x i32> zeroinitializer, ptr [[TMP3]], align 8
295 ; ORIGINS-NEXT: store <2 x i32> zeroinitializer, ptr [[P]], align 8
296 ; ORIGINS-NEXT: ret void
298 store <2 x i32> zeroinitializer, ptr %p
302 define void @store.v4i32(ptr %p) sanitize_memory {
303 ; CHECK-LABEL: @store.v4i32(
304 ; CHECK-NEXT: call void @llvm.donothing()
305 ; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
306 ; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
307 ; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
308 ; CHECK-NEXT: store <4 x i32> zeroinitializer, ptr [[TMP3]], align 16
309 ; CHECK-NEXT: store <4 x i32> zeroinitializer, ptr [[P]], align 16
310 ; CHECK-NEXT: ret void
312 ; ADDR-LABEL: @store.v4i32(
313 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
314 ; ADDR-NEXT: call void @llvm.donothing()
315 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
316 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
318 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
319 ; ADDR-NEXT: unreachable
321 ; ADDR-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P:%.*]] to i64
322 ; ADDR-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 87960930222080
323 ; ADDR-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
324 ; ADDR-NEXT: store <4 x i32> zeroinitializer, ptr [[TMP6]], align 16
325 ; ADDR-NEXT: store <4 x i32> zeroinitializer, ptr [[P]], align 16
326 ; ADDR-NEXT: ret void
328 ; ORIGINS-LABEL: @store.v4i32(
329 ; ORIGINS-NEXT: call void @llvm.donothing()
330 ; ORIGINS-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
331 ; ORIGINS-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
332 ; ORIGINS-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
333 ; ORIGINS-NEXT: [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416
334 ; ORIGINS-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr
335 ; ORIGINS-NEXT: store <4 x i32> zeroinitializer, ptr [[TMP3]], align 16
336 ; ORIGINS-NEXT: store <4 x i32> zeroinitializer, ptr [[P]], align 16
337 ; ORIGINS-NEXT: ret void
339 store <4 x i32> zeroinitializer, ptr %p
343 define void @store.v8i32(ptr %p) sanitize_memory {
344 ; CHECK-LABEL: @store.v8i32(
345 ; CHECK-NEXT: call void @llvm.donothing()
346 ; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
347 ; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
348 ; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
349 ; CHECK-NEXT: store <8 x i32> zeroinitializer, ptr [[TMP3]], align 32
350 ; CHECK-NEXT: store <8 x i32> zeroinitializer, ptr [[P]], align 32
351 ; CHECK-NEXT: ret void
353 ; ADDR-LABEL: @store.v8i32(
354 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
355 ; ADDR-NEXT: call void @llvm.donothing()
356 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
357 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
359 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
360 ; ADDR-NEXT: unreachable
362 ; ADDR-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P:%.*]] to i64
363 ; ADDR-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 87960930222080
364 ; ADDR-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
365 ; ADDR-NEXT: store <8 x i32> zeroinitializer, ptr [[TMP6]], align 32
366 ; ADDR-NEXT: store <8 x i32> zeroinitializer, ptr [[P]], align 32
367 ; ADDR-NEXT: ret void
369 ; ORIGINS-LABEL: @store.v8i32(
370 ; ORIGINS-NEXT: call void @llvm.donothing()
371 ; ORIGINS-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
372 ; ORIGINS-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
373 ; ORIGINS-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
374 ; ORIGINS-NEXT: [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416
375 ; ORIGINS-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr
376 ; ORIGINS-NEXT: store <8 x i32> zeroinitializer, ptr [[TMP3]], align 32
377 ; ORIGINS-NEXT: store <8 x i32> zeroinitializer, ptr [[P]], align 32
378 ; ORIGINS-NEXT: ret void
380 store <8 x i32> zeroinitializer, ptr %p
384 define void @store.v16i32(ptr %p) sanitize_memory {
385 ; CHECK-LABEL: @store.v16i32(
386 ; CHECK-NEXT: call void @llvm.donothing()
387 ; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
388 ; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
389 ; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
390 ; CHECK-NEXT: store <16 x i32> zeroinitializer, ptr [[TMP3]], align 64
391 ; CHECK-NEXT: store <16 x i32> zeroinitializer, ptr [[P]], align 64
392 ; CHECK-NEXT: ret void
394 ; ADDR-LABEL: @store.v16i32(
395 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
396 ; ADDR-NEXT: call void @llvm.donothing()
397 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
398 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
400 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
401 ; ADDR-NEXT: unreachable
403 ; ADDR-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P:%.*]] to i64
404 ; ADDR-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 87960930222080
405 ; ADDR-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
406 ; ADDR-NEXT: store <16 x i32> zeroinitializer, ptr [[TMP6]], align 64
407 ; ADDR-NEXT: store <16 x i32> zeroinitializer, ptr [[P]], align 64
408 ; ADDR-NEXT: ret void
410 ; ORIGINS-LABEL: @store.v16i32(
411 ; ORIGINS-NEXT: call void @llvm.donothing()
412 ; ORIGINS-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
413 ; ORIGINS-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
414 ; ORIGINS-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
415 ; ORIGINS-NEXT: [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416
416 ; ORIGINS-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr
417 ; ORIGINS-NEXT: store <16 x i32> zeroinitializer, ptr [[TMP3]], align 64
418 ; ORIGINS-NEXT: store <16 x i32> zeroinitializer, ptr [[P]], align 64
419 ; ORIGINS-NEXT: ret void
421 store <16 x i32> zeroinitializer, ptr %p
425 define void @load.nxv1i32(ptr %p) sanitize_memory {
426 ; CHECK-LABEL: @load.nxv1i32(
427 ; CHECK-NEXT: call void @llvm.donothing()
428 ; CHECK-NEXT: [[TMP1:%.*]] = load <vscale x 1 x i32>, ptr [[P:%.*]], align 4
429 ; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
430 ; CHECK-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
431 ; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
432 ; CHECK-NEXT: [[_MSLD:%.*]] = load <vscale x 1 x i32>, ptr [[TMP4]], align 4
433 ; CHECK-NEXT: ret void
435 ; ADDR-LABEL: @load.nxv1i32(
436 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
437 ; ADDR-NEXT: call void @llvm.donothing()
438 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
439 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
441 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
442 ; ADDR-NEXT: unreachable
444 ; ADDR-NEXT: [[TMP4:%.*]] = load <vscale x 1 x i32>, ptr [[P:%.*]], align 4
445 ; ADDR-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64
446 ; ADDR-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
447 ; ADDR-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
448 ; ADDR-NEXT: [[_MSLD:%.*]] = load <vscale x 1 x i32>, ptr [[TMP7]], align 4
449 ; ADDR-NEXT: ret void
451 ; ORIGINS-LABEL: @load.nxv1i32(
452 ; ORIGINS-NEXT: call void @llvm.donothing()
453 ; ORIGINS-NEXT: [[TMP1:%.*]] = load <vscale x 1 x i32>, ptr [[P:%.*]], align 4
454 ; ORIGINS-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
455 ; ORIGINS-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
456 ; ORIGINS-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
457 ; ORIGINS-NEXT: [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
458 ; ORIGINS-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
459 ; ORIGINS-NEXT: [[_MSLD:%.*]] = load <vscale x 1 x i32>, ptr [[TMP4]], align 4
460 ; ORIGINS-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 4
461 ; ORIGINS-NEXT: ret void
463 load <vscale x 1 x i32>, ptr %p
467 define void @load.nxv2i32(ptr %p) sanitize_memory {
468 ; CHECK-LABEL: @load.nxv2i32(
469 ; CHECK-NEXT: call void @llvm.donothing()
470 ; CHECK-NEXT: [[TMP1:%.*]] = load <vscale x 2 x i32>, ptr [[P:%.*]], align 8
471 ; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
472 ; CHECK-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
473 ; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
474 ; CHECK-NEXT: [[_MSLD:%.*]] = load <vscale x 2 x i32>, ptr [[TMP4]], align 8
475 ; CHECK-NEXT: ret void
477 ; ADDR-LABEL: @load.nxv2i32(
478 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
479 ; ADDR-NEXT: call void @llvm.donothing()
480 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
481 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
483 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
484 ; ADDR-NEXT: unreachable
486 ; ADDR-NEXT: [[TMP4:%.*]] = load <vscale x 2 x i32>, ptr [[P:%.*]], align 8
487 ; ADDR-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64
488 ; ADDR-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
489 ; ADDR-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
490 ; ADDR-NEXT: [[_MSLD:%.*]] = load <vscale x 2 x i32>, ptr [[TMP7]], align 8
491 ; ADDR-NEXT: ret void
493 ; ORIGINS-LABEL: @load.nxv2i32(
494 ; ORIGINS-NEXT: call void @llvm.donothing()
495 ; ORIGINS-NEXT: [[TMP1:%.*]] = load <vscale x 2 x i32>, ptr [[P:%.*]], align 8
496 ; ORIGINS-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
497 ; ORIGINS-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
498 ; ORIGINS-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
499 ; ORIGINS-NEXT: [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
500 ; ORIGINS-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
501 ; ORIGINS-NEXT: [[_MSLD:%.*]] = load <vscale x 2 x i32>, ptr [[TMP4]], align 8
502 ; ORIGINS-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 8
503 ; ORIGINS-NEXT: ret void
505 load <vscale x 2 x i32>, ptr %p
509 define void @load.nxv4i32(ptr %p) sanitize_memory {
510 ; CHECK-LABEL: @load.nxv4i32(
511 ; CHECK-NEXT: call void @llvm.donothing()
512 ; CHECK-NEXT: [[TMP1:%.*]] = load <vscale x 4 x i32>, ptr [[P:%.*]], align 16
513 ; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
514 ; CHECK-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
515 ; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
516 ; CHECK-NEXT: [[_MSLD:%.*]] = load <vscale x 4 x i32>, ptr [[TMP4]], align 16
517 ; CHECK-NEXT: ret void
519 ; ADDR-LABEL: @load.nxv4i32(
520 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
521 ; ADDR-NEXT: call void @llvm.donothing()
522 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
523 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
525 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
526 ; ADDR-NEXT: unreachable
528 ; ADDR-NEXT: [[TMP4:%.*]] = load <vscale x 4 x i32>, ptr [[P:%.*]], align 16
529 ; ADDR-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64
530 ; ADDR-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
531 ; ADDR-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
532 ; ADDR-NEXT: [[_MSLD:%.*]] = load <vscale x 4 x i32>, ptr [[TMP7]], align 16
533 ; ADDR-NEXT: ret void
535 ; ORIGINS-LABEL: @load.nxv4i32(
536 ; ORIGINS-NEXT: call void @llvm.donothing()
537 ; ORIGINS-NEXT: [[TMP1:%.*]] = load <vscale x 4 x i32>, ptr [[P:%.*]], align 16
538 ; ORIGINS-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
539 ; ORIGINS-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
540 ; ORIGINS-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
541 ; ORIGINS-NEXT: [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
542 ; ORIGINS-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
543 ; ORIGINS-NEXT: [[_MSLD:%.*]] = load <vscale x 4 x i32>, ptr [[TMP4]], align 16
544 ; ORIGINS-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 16
545 ; ORIGINS-NEXT: ret void
547 load <vscale x 4 x i32>, ptr %p
551 define void @load.nxv8i32(ptr %p) sanitize_memory {
552 ; CHECK-LABEL: @load.nxv8i32(
553 ; CHECK-NEXT: call void @llvm.donothing()
554 ; CHECK-NEXT: [[TMP1:%.*]] = load <vscale x 8 x i32>, ptr [[P:%.*]], align 32
555 ; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
556 ; CHECK-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
557 ; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
558 ; CHECK-NEXT: [[_MSLD:%.*]] = load <vscale x 8 x i32>, ptr [[TMP4]], align 32
559 ; CHECK-NEXT: ret void
561 ; ADDR-LABEL: @load.nxv8i32(
562 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
563 ; ADDR-NEXT: call void @llvm.donothing()
564 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
565 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
567 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
568 ; ADDR-NEXT: unreachable
570 ; ADDR-NEXT: [[TMP4:%.*]] = load <vscale x 8 x i32>, ptr [[P:%.*]], align 32
571 ; ADDR-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64
572 ; ADDR-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
573 ; ADDR-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
574 ; ADDR-NEXT: [[_MSLD:%.*]] = load <vscale x 8 x i32>, ptr [[TMP7]], align 32
575 ; ADDR-NEXT: ret void
577 ; ORIGINS-LABEL: @load.nxv8i32(
578 ; ORIGINS-NEXT: call void @llvm.donothing()
579 ; ORIGINS-NEXT: [[TMP1:%.*]] = load <vscale x 8 x i32>, ptr [[P:%.*]], align 32
580 ; ORIGINS-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
581 ; ORIGINS-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
582 ; ORIGINS-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
583 ; ORIGINS-NEXT: [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
584 ; ORIGINS-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
585 ; ORIGINS-NEXT: [[_MSLD:%.*]] = load <vscale x 8 x i32>, ptr [[TMP4]], align 32
586 ; ORIGINS-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 32
587 ; ORIGINS-NEXT: ret void
589 load <vscale x 8 x i32>, ptr %p
593 define void @load.nxv16i32(ptr %p) sanitize_memory {
594 ; CHECK-LABEL: @load.nxv16i32(
595 ; CHECK-NEXT: call void @llvm.donothing()
596 ; CHECK-NEXT: [[TMP1:%.*]] = load <vscale x 16 x i32>, ptr [[P:%.*]], align 64
597 ; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
598 ; CHECK-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
599 ; CHECK-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
600 ; CHECK-NEXT: [[_MSLD:%.*]] = load <vscale x 16 x i32>, ptr [[TMP4]], align 64
601 ; CHECK-NEXT: ret void
603 ; ADDR-LABEL: @load.nxv16i32(
604 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
605 ; ADDR-NEXT: call void @llvm.donothing()
606 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
607 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
609 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
610 ; ADDR-NEXT: unreachable
612 ; ADDR-NEXT: [[TMP4:%.*]] = load <vscale x 16 x i32>, ptr [[P:%.*]], align 64
613 ; ADDR-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64
614 ; ADDR-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 87960930222080
615 ; ADDR-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
616 ; ADDR-NEXT: [[_MSLD:%.*]] = load <vscale x 16 x i32>, ptr [[TMP7]], align 64
617 ; ADDR-NEXT: ret void
619 ; ORIGINS-LABEL: @load.nxv16i32(
620 ; ORIGINS-NEXT: call void @llvm.donothing()
621 ; ORIGINS-NEXT: [[TMP1:%.*]] = load <vscale x 16 x i32>, ptr [[P:%.*]], align 64
622 ; ORIGINS-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[P]] to i64
623 ; ORIGINS-NEXT: [[TMP3:%.*]] = xor i64 [[TMP2]], 87960930222080
624 ; ORIGINS-NEXT: [[TMP4:%.*]] = inttoptr i64 [[TMP3]] to ptr
625 ; ORIGINS-NEXT: [[TMP5:%.*]] = add i64 [[TMP3]], 17592186044416
626 ; ORIGINS-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
627 ; ORIGINS-NEXT: [[_MSLD:%.*]] = load <vscale x 16 x i32>, ptr [[TMP4]], align 64
628 ; ORIGINS-NEXT: [[TMP7:%.*]] = load i32, ptr [[TMP6]], align 64
629 ; ORIGINS-NEXT: ret void
631 load <vscale x 16 x i32>, ptr %p
636 define void @store.nxv1i32(ptr %p) sanitize_memory {
637 ; CHECK-LABEL: @store.nxv1i32(
638 ; CHECK-NEXT: call void @llvm.donothing()
639 ; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
640 ; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
641 ; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
642 ; CHECK-NEXT: store <vscale x 1 x i32> zeroinitializer, ptr [[TMP3]], align 4
643 ; CHECK-NEXT: store <vscale x 1 x i32> zeroinitializer, ptr [[P]], align 4
644 ; CHECK-NEXT: ret void
646 ; ADDR-LABEL: @store.nxv1i32(
647 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
648 ; ADDR-NEXT: call void @llvm.donothing()
649 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
650 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
652 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
653 ; ADDR-NEXT: unreachable
655 ; ADDR-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P:%.*]] to i64
656 ; ADDR-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 87960930222080
657 ; ADDR-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
658 ; ADDR-NEXT: store <vscale x 1 x i32> zeroinitializer, ptr [[TMP6]], align 4
659 ; ADDR-NEXT: store <vscale x 1 x i32> zeroinitializer, ptr [[P]], align 4
660 ; ADDR-NEXT: ret void
662 ; ORIGINS-LABEL: @store.nxv1i32(
663 ; ORIGINS-NEXT: call void @llvm.donothing()
664 ; ORIGINS-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
665 ; ORIGINS-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
666 ; ORIGINS-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
667 ; ORIGINS-NEXT: [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416
668 ; ORIGINS-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr
669 ; ORIGINS-NEXT: store <vscale x 1 x i32> zeroinitializer, ptr [[TMP3]], align 4
670 ; ORIGINS-NEXT: [[TMP6:%.*]] = call i32 @llvm.vector.reduce.or.nxv1i32(<vscale x 1 x i32> zeroinitializer)
671 ; ORIGINS-NEXT: [[_MSCMP:%.*]] = icmp ne i32 [[TMP6]], 0
672 ; ORIGINS-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP13:%.*]], !prof [[PROF0:![0-9]+]]
674 ; ORIGINS-NEXT: [[TMP8:%.*]] = call i64 @llvm.vscale.i64()
675 ; ORIGINS-NEXT: [[TMP9:%.*]] = mul i64 [[TMP8]], 4
676 ; ORIGINS-NEXT: [[TMP10:%.*]] = add i64 [[TMP9]], 3
677 ; ORIGINS-NEXT: [[TMP11:%.*]] = udiv i64 [[TMP10]], 4
678 ; ORIGINS-NEXT: br label [[DOTSPLIT:%.*]]
680 ; ORIGINS-NEXT: [[IV:%.*]] = phi i64 [ 0, [[TMP7]] ], [ [[IV_NEXT:%.*]], [[DOTSPLIT]] ]
681 ; ORIGINS-NEXT: [[TMP12:%.*]] = getelementptr i32, ptr [[TMP5]], i64 [[IV]]
682 ; ORIGINS-NEXT: store i32 0, ptr [[TMP12]], align 4
683 ; ORIGINS-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
684 ; ORIGINS-NEXT: [[IV_CHECK:%.*]] = icmp eq i64 [[IV_NEXT]], [[TMP11]]
685 ; ORIGINS-NEXT: br i1 [[IV_CHECK]], label [[DOTSPLIT_SPLIT:%.*]], label [[DOTSPLIT]]
686 ; ORIGINS: .split.split:
687 ; ORIGINS-NEXT: br label [[TMP13]]
689 ; ORIGINS-NEXT: store <vscale x 1 x i32> zeroinitializer, ptr [[P]], align 4
690 ; ORIGINS-NEXT: ret void
692 store <vscale x 1 x i32> zeroinitializer, ptr %p
696 define void @store.nxv2i32(ptr %p) sanitize_memory {
697 ; CHECK-LABEL: @store.nxv2i32(
698 ; CHECK-NEXT: call void @llvm.donothing()
699 ; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
700 ; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
701 ; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
702 ; CHECK-NEXT: store <vscale x 2 x i32> zeroinitializer, ptr [[TMP3]], align 8
703 ; CHECK-NEXT: store <vscale x 2 x i32> zeroinitializer, ptr [[P]], align 8
704 ; CHECK-NEXT: ret void
706 ; ADDR-LABEL: @store.nxv2i32(
707 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
708 ; ADDR-NEXT: call void @llvm.donothing()
709 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
710 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
712 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
713 ; ADDR-NEXT: unreachable
715 ; ADDR-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P:%.*]] to i64
716 ; ADDR-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 87960930222080
717 ; ADDR-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
718 ; ADDR-NEXT: store <vscale x 2 x i32> zeroinitializer, ptr [[TMP6]], align 8
719 ; ADDR-NEXT: store <vscale x 2 x i32> zeroinitializer, ptr [[P]], align 8
720 ; ADDR-NEXT: ret void
722 ; ORIGINS-LABEL: @store.nxv2i32(
723 ; ORIGINS-NEXT: call void @llvm.donothing()
724 ; ORIGINS-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
725 ; ORIGINS-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
726 ; ORIGINS-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
727 ; ORIGINS-NEXT: [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416
728 ; ORIGINS-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr
729 ; ORIGINS-NEXT: store <vscale x 2 x i32> zeroinitializer, ptr [[TMP3]], align 8
730 ; ORIGINS-NEXT: [[TMP6:%.*]] = call i32 @llvm.vector.reduce.or.nxv2i32(<vscale x 2 x i32> zeroinitializer)
731 ; ORIGINS-NEXT: [[_MSCMP:%.*]] = icmp ne i32 [[TMP6]], 0
732 ; ORIGINS-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP13:%.*]], !prof [[PROF0]]
734 ; ORIGINS-NEXT: [[TMP8:%.*]] = call i64 @llvm.vscale.i64()
735 ; ORIGINS-NEXT: [[TMP9:%.*]] = mul i64 [[TMP8]], 8
736 ; ORIGINS-NEXT: [[TMP10:%.*]] = add i64 [[TMP9]], 3
737 ; ORIGINS-NEXT: [[TMP11:%.*]] = udiv i64 [[TMP10]], 4
738 ; ORIGINS-NEXT: br label [[DOTSPLIT:%.*]]
740 ; ORIGINS-NEXT: [[IV:%.*]] = phi i64 [ 0, [[TMP7]] ], [ [[IV_NEXT:%.*]], [[DOTSPLIT]] ]
741 ; ORIGINS-NEXT: [[TMP12:%.*]] = getelementptr i32, ptr [[TMP5]], i64 [[IV]]
742 ; ORIGINS-NEXT: store i32 0, ptr [[TMP12]], align 4
743 ; ORIGINS-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
744 ; ORIGINS-NEXT: [[IV_CHECK:%.*]] = icmp eq i64 [[IV_NEXT]], [[TMP11]]
745 ; ORIGINS-NEXT: br i1 [[IV_CHECK]], label [[DOTSPLIT_SPLIT:%.*]], label [[DOTSPLIT]]
746 ; ORIGINS: .split.split:
747 ; ORIGINS-NEXT: br label [[TMP13]]
749 ; ORIGINS-NEXT: store <vscale x 2 x i32> zeroinitializer, ptr [[P]], align 8
750 ; ORIGINS-NEXT: ret void
752 store <vscale x 2 x i32> zeroinitializer, ptr %p
756 define void @store.nxv4i32(ptr %p) sanitize_memory {
757 ; CHECK-LABEL: @store.nxv4i32(
758 ; CHECK-NEXT: call void @llvm.donothing()
759 ; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
760 ; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
761 ; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
762 ; CHECK-NEXT: store <vscale x 4 x i32> zeroinitializer, ptr [[TMP3]], align 16
763 ; CHECK-NEXT: store <vscale x 4 x i32> zeroinitializer, ptr [[P]], align 16
764 ; CHECK-NEXT: ret void
766 ; ADDR-LABEL: @store.nxv4i32(
767 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
768 ; ADDR-NEXT: call void @llvm.donothing()
769 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
770 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
772 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
773 ; ADDR-NEXT: unreachable
775 ; ADDR-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P:%.*]] to i64
776 ; ADDR-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 87960930222080
777 ; ADDR-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
778 ; ADDR-NEXT: store <vscale x 4 x i32> zeroinitializer, ptr [[TMP6]], align 16
779 ; ADDR-NEXT: store <vscale x 4 x i32> zeroinitializer, ptr [[P]], align 16
780 ; ADDR-NEXT: ret void
782 ; ORIGINS-LABEL: @store.nxv4i32(
783 ; ORIGINS-NEXT: call void @llvm.donothing()
784 ; ORIGINS-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
785 ; ORIGINS-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
786 ; ORIGINS-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
787 ; ORIGINS-NEXT: [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416
788 ; ORIGINS-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr
789 ; ORIGINS-NEXT: store <vscale x 4 x i32> zeroinitializer, ptr [[TMP3]], align 16
790 ; ORIGINS-NEXT: [[TMP6:%.*]] = call i32 @llvm.vector.reduce.or.nxv4i32(<vscale x 4 x i32> zeroinitializer)
791 ; ORIGINS-NEXT: [[_MSCMP:%.*]] = icmp ne i32 [[TMP6]], 0
792 ; ORIGINS-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP13:%.*]], !prof [[PROF0]]
794 ; ORIGINS-NEXT: [[TMP8:%.*]] = call i64 @llvm.vscale.i64()
795 ; ORIGINS-NEXT: [[TMP9:%.*]] = mul i64 [[TMP8]], 16
796 ; ORIGINS-NEXT: [[TMP10:%.*]] = add i64 [[TMP9]], 3
797 ; ORIGINS-NEXT: [[TMP11:%.*]] = udiv i64 [[TMP10]], 4
798 ; ORIGINS-NEXT: br label [[DOTSPLIT:%.*]]
800 ; ORIGINS-NEXT: [[IV:%.*]] = phi i64 [ 0, [[TMP7]] ], [ [[IV_NEXT:%.*]], [[DOTSPLIT]] ]
801 ; ORIGINS-NEXT: [[TMP12:%.*]] = getelementptr i32, ptr [[TMP5]], i64 [[IV]]
802 ; ORIGINS-NEXT: store i32 0, ptr [[TMP12]], align 4
803 ; ORIGINS-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
804 ; ORIGINS-NEXT: [[IV_CHECK:%.*]] = icmp eq i64 [[IV_NEXT]], [[TMP11]]
805 ; ORIGINS-NEXT: br i1 [[IV_CHECK]], label [[DOTSPLIT_SPLIT:%.*]], label [[DOTSPLIT]]
806 ; ORIGINS: .split.split:
807 ; ORIGINS-NEXT: br label [[TMP13]]
809 ; ORIGINS-NEXT: store <vscale x 4 x i32> zeroinitializer, ptr [[P]], align 16
810 ; ORIGINS-NEXT: ret void
812 store <vscale x 4 x i32> zeroinitializer, ptr %p
816 define void @store.nxv8i32(ptr %p) sanitize_memory {
817 ; CHECK-LABEL: @store.nxv8i32(
818 ; CHECK-NEXT: call void @llvm.donothing()
819 ; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
820 ; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
821 ; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
822 ; CHECK-NEXT: store <vscale x 8 x i32> zeroinitializer, ptr [[TMP3]], align 32
823 ; CHECK-NEXT: store <vscale x 8 x i32> zeroinitializer, ptr [[P]], align 32
824 ; CHECK-NEXT: ret void
826 ; ADDR-LABEL: @store.nxv8i32(
827 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
828 ; ADDR-NEXT: call void @llvm.donothing()
829 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
830 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
832 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
833 ; ADDR-NEXT: unreachable
835 ; ADDR-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P:%.*]] to i64
836 ; ADDR-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 87960930222080
837 ; ADDR-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
838 ; ADDR-NEXT: store <vscale x 8 x i32> zeroinitializer, ptr [[TMP6]], align 32
839 ; ADDR-NEXT: store <vscale x 8 x i32> zeroinitializer, ptr [[P]], align 32
840 ; ADDR-NEXT: ret void
842 ; ORIGINS-LABEL: @store.nxv8i32(
843 ; ORIGINS-NEXT: call void @llvm.donothing()
844 ; ORIGINS-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
845 ; ORIGINS-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
846 ; ORIGINS-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
847 ; ORIGINS-NEXT: [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416
848 ; ORIGINS-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr
849 ; ORIGINS-NEXT: store <vscale x 8 x i32> zeroinitializer, ptr [[TMP3]], align 32
850 ; ORIGINS-NEXT: [[TMP6:%.*]] = call i32 @llvm.vector.reduce.or.nxv8i32(<vscale x 8 x i32> zeroinitializer)
851 ; ORIGINS-NEXT: [[_MSCMP:%.*]] = icmp ne i32 [[TMP6]], 0
852 ; ORIGINS-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP13:%.*]], !prof [[PROF0]]
854 ; ORIGINS-NEXT: [[TMP8:%.*]] = call i64 @llvm.vscale.i64()
855 ; ORIGINS-NEXT: [[TMP9:%.*]] = mul i64 [[TMP8]], 32
856 ; ORIGINS-NEXT: [[TMP10:%.*]] = add i64 [[TMP9]], 3
857 ; ORIGINS-NEXT: [[TMP11:%.*]] = udiv i64 [[TMP10]], 4
858 ; ORIGINS-NEXT: br label [[DOTSPLIT:%.*]]
860 ; ORIGINS-NEXT: [[IV:%.*]] = phi i64 [ 0, [[TMP7]] ], [ [[IV_NEXT:%.*]], [[DOTSPLIT]] ]
861 ; ORIGINS-NEXT: [[TMP12:%.*]] = getelementptr i32, ptr [[TMP5]], i64 [[IV]]
862 ; ORIGINS-NEXT: store i32 0, ptr [[TMP12]], align 4
863 ; ORIGINS-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
864 ; ORIGINS-NEXT: [[IV_CHECK:%.*]] = icmp eq i64 [[IV_NEXT]], [[TMP11]]
865 ; ORIGINS-NEXT: br i1 [[IV_CHECK]], label [[DOTSPLIT_SPLIT:%.*]], label [[DOTSPLIT]]
866 ; ORIGINS: .split.split:
867 ; ORIGINS-NEXT: br label [[TMP13]]
869 ; ORIGINS-NEXT: store <vscale x 8 x i32> zeroinitializer, ptr [[P]], align 32
870 ; ORIGINS-NEXT: ret void
872 store <vscale x 8 x i32> zeroinitializer, ptr %p
876 define void @store.nxv16i32(ptr %p) sanitize_memory {
877 ; CHECK-LABEL: @store.nxv16i32(
878 ; CHECK-NEXT: call void @llvm.donothing()
879 ; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
880 ; CHECK-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
881 ; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
882 ; CHECK-NEXT: store <vscale x 16 x i32> zeroinitializer, ptr [[TMP3]], align 64
883 ; CHECK-NEXT: store <vscale x 16 x i32> zeroinitializer, ptr [[P]], align 64
884 ; CHECK-NEXT: ret void
886 ; ADDR-LABEL: @store.nxv16i32(
887 ; ADDR-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
888 ; ADDR-NEXT: call void @llvm.donothing()
889 ; ADDR-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
890 ; ADDR-NEXT: br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF0]]
892 ; ADDR-NEXT: call void @__msan_warning_noreturn() #[[ATTR3]]
893 ; ADDR-NEXT: unreachable
895 ; ADDR-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P:%.*]] to i64
896 ; ADDR-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 87960930222080
897 ; ADDR-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
898 ; ADDR-NEXT: store <vscale x 16 x i32> zeroinitializer, ptr [[TMP6]], align 64
899 ; ADDR-NEXT: store <vscale x 16 x i32> zeroinitializer, ptr [[P]], align 64
900 ; ADDR-NEXT: ret void
902 ; ORIGINS-LABEL: @store.nxv16i32(
903 ; ORIGINS-NEXT: call void @llvm.donothing()
904 ; ORIGINS-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[P:%.*]] to i64
905 ; ORIGINS-NEXT: [[TMP2:%.*]] = xor i64 [[TMP1]], 87960930222080
906 ; ORIGINS-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
907 ; ORIGINS-NEXT: [[TMP4:%.*]] = add i64 [[TMP2]], 17592186044416
908 ; ORIGINS-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr
909 ; ORIGINS-NEXT: store <vscale x 16 x i32> zeroinitializer, ptr [[TMP3]], align 64
910 ; ORIGINS-NEXT: [[TMP6:%.*]] = call i32 @llvm.vector.reduce.or.nxv16i32(<vscale x 16 x i32> zeroinitializer)
911 ; ORIGINS-NEXT: [[_MSCMP:%.*]] = icmp ne i32 [[TMP6]], 0
912 ; ORIGINS-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP13:%.*]], !prof [[PROF0]]
914 ; ORIGINS-NEXT: [[TMP8:%.*]] = call i64 @llvm.vscale.i64()
915 ; ORIGINS-NEXT: [[TMP9:%.*]] = mul i64 [[TMP8]], 64
916 ; ORIGINS-NEXT: [[TMP10:%.*]] = add i64 [[TMP9]], 3
917 ; ORIGINS-NEXT: [[TMP11:%.*]] = udiv i64 [[TMP10]], 4
918 ; ORIGINS-NEXT: br label [[DOTSPLIT:%.*]]
920 ; ORIGINS-NEXT: [[IV:%.*]] = phi i64 [ 0, [[TMP7]] ], [ [[IV_NEXT:%.*]], [[DOTSPLIT]] ]
921 ; ORIGINS-NEXT: [[TMP12:%.*]] = getelementptr i32, ptr [[TMP5]], i64 [[IV]]
922 ; ORIGINS-NEXT: store i32 0, ptr [[TMP12]], align 4
923 ; ORIGINS-NEXT: [[IV_NEXT]] = add nuw nsw i64 [[IV]], 1
924 ; ORIGINS-NEXT: [[IV_CHECK:%.*]] = icmp eq i64 [[IV_NEXT]], [[TMP11]]
925 ; ORIGINS-NEXT: br i1 [[IV_CHECK]], label [[DOTSPLIT_SPLIT:%.*]], label [[DOTSPLIT]]
926 ; ORIGINS: .split.split:
927 ; ORIGINS-NEXT: br label [[TMP13]]
929 ; ORIGINS-NEXT: store <vscale x 16 x i32> zeroinitializer, ptr [[P]], align 64
930 ; ORIGINS-NEXT: ret void
932 store <vscale x 16 x i32> zeroinitializer, ptr %p