1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -mtriple=riscv64 -mattr=+zihintntl,+f,+d,+zfh,+v < %s | FileCheck %s -check-prefix=CHECK-RV64V
3 ; RUN: llc -mtriple=riscv32 -mattr=+zihintntl,+f,+d,+zfh,+v < %s | FileCheck %s -check-prefix=CHECK-RV32V
5 define <vscale x 2 x i64> @test_nontemporal_load_nxv2i64(ptr %p) {
6 ; CHECK-RV64V-LABEL: test_nontemporal_load_nxv2i64:
7 ; CHECK-RV64V: # %bb.0:
8 ; CHECK-RV64V-NEXT: ntl.all
9 ; CHECK-RV64V-NEXT: vl2re64.v v8, (a0)
10 ; CHECK-RV64V-NEXT: ret
12 ; CHECK-RV32V-LABEL: test_nontemporal_load_nxv2i64:
13 ; CHECK-RV32V: # %bb.0:
14 ; CHECK-RV32V-NEXT: ntl.all
15 ; CHECK-RV32V-NEXT: vl2re64.v v8, (a0)
16 ; CHECK-RV32V-NEXT: ret
17 %1 = load <vscale x 2 x i64>, ptr %p, !nontemporal !0
18 ret <vscale x 2 x i64> %1
21 define <vscale x 4 x i32> @test_nontemporal_load_nxv4i32(ptr %p) {
22 ; CHECK-RV64V-LABEL: test_nontemporal_load_nxv4i32:
23 ; CHECK-RV64V: # %bb.0:
24 ; CHECK-RV64V-NEXT: ntl.all
25 ; CHECK-RV64V-NEXT: vl2re32.v v8, (a0)
26 ; CHECK-RV64V-NEXT: ret
28 ; CHECK-RV32V-LABEL: test_nontemporal_load_nxv4i32:
29 ; CHECK-RV32V: # %bb.0:
30 ; CHECK-RV32V-NEXT: ntl.all
31 ; CHECK-RV32V-NEXT: vl2re32.v v8, (a0)
32 ; CHECK-RV32V-NEXT: ret
33 %1 = load <vscale x 4 x i32>, ptr %p, !nontemporal !0
34 ret <vscale x 4 x i32> %1
37 define <vscale x 8 x i16> @test_nontemporal_load_nxv8i16(ptr %p) {
38 ; CHECK-RV64V-LABEL: test_nontemporal_load_nxv8i16:
39 ; CHECK-RV64V: # %bb.0:
40 ; CHECK-RV64V-NEXT: ntl.all
41 ; CHECK-RV64V-NEXT: vl2re16.v v8, (a0)
42 ; CHECK-RV64V-NEXT: ret
44 ; CHECK-RV32V-LABEL: test_nontemporal_load_nxv8i16:
45 ; CHECK-RV32V: # %bb.0:
46 ; CHECK-RV32V-NEXT: ntl.all
47 ; CHECK-RV32V-NEXT: vl2re16.v v8, (a0)
48 ; CHECK-RV32V-NEXT: ret
49 %1 = load <vscale x 8 x i16>, ptr %p, !nontemporal !0
50 ret <vscale x 8 x i16> %1
53 define <vscale x 16 x i8> @test_nontemporal_load_nxv16i8(ptr %p) {
54 ; CHECK-RV64V-LABEL: test_nontemporal_load_nxv16i8:
55 ; CHECK-RV64V: # %bb.0:
56 ; CHECK-RV64V-NEXT: ntl.all
57 ; CHECK-RV64V-NEXT: vl2r.v v8, (a0)
58 ; CHECK-RV64V-NEXT: ret
60 ; CHECK-RV32V-LABEL: test_nontemporal_load_nxv16i8:
61 ; CHECK-RV32V: # %bb.0:
62 ; CHECK-RV32V-NEXT: ntl.all
63 ; CHECK-RV32V-NEXT: vl2r.v v8, (a0)
64 ; CHECK-RV32V-NEXT: ret
65 %1 = load <vscale x 16 x i8>, ptr %p, !nontemporal !0
66 ret <vscale x 16 x i8> %1
69 define void @test_nontemporal_store_nxv2i64(ptr %p, <vscale x 2 x i64> %v) {
70 ; CHECK-RV64V-LABEL: test_nontemporal_store_nxv2i64:
71 ; CHECK-RV64V: # %bb.0:
72 ; CHECK-RV64V-NEXT: ntl.all
73 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
74 ; CHECK-RV64V-NEXT: ret
76 ; CHECK-RV32V-LABEL: test_nontemporal_store_nxv2i64:
77 ; CHECK-RV32V: # %bb.0:
78 ; CHECK-RV32V-NEXT: ntl.all
79 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
80 ; CHECK-RV32V-NEXT: ret
81 store <vscale x 2 x i64> %v, ptr %p, !nontemporal !0
85 define void @test_nontemporal_store_nxv4i32(ptr %p, <vscale x 4 x i32> %v) {
86 ; CHECK-RV64V-LABEL: test_nontemporal_store_nxv4i32:
87 ; CHECK-RV64V: # %bb.0:
88 ; CHECK-RV64V-NEXT: ntl.all
89 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
90 ; CHECK-RV64V-NEXT: ret
92 ; CHECK-RV32V-LABEL: test_nontemporal_store_nxv4i32:
93 ; CHECK-RV32V: # %bb.0:
94 ; CHECK-RV32V-NEXT: ntl.all
95 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
96 ; CHECK-RV32V-NEXT: ret
97 store <vscale x 4 x i32> %v, ptr %p, !nontemporal !0
101 define void @test_nontemporal_store_nxv8i16(ptr %p, <vscale x 8 x i16> %v) {
102 ; CHECK-RV64V-LABEL: test_nontemporal_store_nxv8i16:
103 ; CHECK-RV64V: # %bb.0:
104 ; CHECK-RV64V-NEXT: ntl.all
105 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
106 ; CHECK-RV64V-NEXT: ret
108 ; CHECK-RV32V-LABEL: test_nontemporal_store_nxv8i16:
109 ; CHECK-RV32V: # %bb.0:
110 ; CHECK-RV32V-NEXT: ntl.all
111 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
112 ; CHECK-RV32V-NEXT: ret
113 store <vscale x 8 x i16> %v, ptr %p, !nontemporal !0
117 define void @test_nontemporal_store_nxv16i8(ptr %p, <vscale x 16 x i8> %v) {
118 ; CHECK-RV64V-LABEL: test_nontemporal_store_nxv16i8:
119 ; CHECK-RV64V: # %bb.0:
120 ; CHECK-RV64V-NEXT: ntl.all
121 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
122 ; CHECK-RV64V-NEXT: ret
124 ; CHECK-RV32V-LABEL: test_nontemporal_store_nxv16i8:
125 ; CHECK-RV32V: # %bb.0:
126 ; CHECK-RV32V-NEXT: ntl.all
127 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
128 ; CHECK-RV32V-NEXT: ret
129 store <vscale x 16 x i8> %v, ptr %p, !nontemporal !0
133 define <vscale x 2 x i64> @test_nontemporal_P1_load_nxv2i64(ptr %p) {
134 ; CHECK-RV64V-LABEL: test_nontemporal_P1_load_nxv2i64:
135 ; CHECK-RV64V: # %bb.0:
136 ; CHECK-RV64V-NEXT: ntl.p1
137 ; CHECK-RV64V-NEXT: vl2re64.v v8, (a0)
138 ; CHECK-RV64V-NEXT: ret
140 ; CHECK-RV32V-LABEL: test_nontemporal_P1_load_nxv2i64:
141 ; CHECK-RV32V: # %bb.0:
142 ; CHECK-RV32V-NEXT: ntl.p1
143 ; CHECK-RV32V-NEXT: vl2re64.v v8, (a0)
144 ; CHECK-RV32V-NEXT: ret
145 %1 = load <vscale x 2 x i64>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !1
146 ret <vscale x 2 x i64> %1
149 define <vscale x 4 x i32> @test_nontemporal_P1_load_nxv4i32(ptr %p) {
150 ; CHECK-RV64V-LABEL: test_nontemporal_P1_load_nxv4i32:
151 ; CHECK-RV64V: # %bb.0:
152 ; CHECK-RV64V-NEXT: ntl.p1
153 ; CHECK-RV64V-NEXT: vl2re32.v v8, (a0)
154 ; CHECK-RV64V-NEXT: ret
156 ; CHECK-RV32V-LABEL: test_nontemporal_P1_load_nxv4i32:
157 ; CHECK-RV32V: # %bb.0:
158 ; CHECK-RV32V-NEXT: ntl.p1
159 ; CHECK-RV32V-NEXT: vl2re32.v v8, (a0)
160 ; CHECK-RV32V-NEXT: ret
161 %1 = load <vscale x 4 x i32>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !1
162 ret <vscale x 4 x i32> %1
165 define <vscale x 8 x i16> @test_nontemporal_P1_load_nxv8i16(ptr %p) {
166 ; CHECK-RV64V-LABEL: test_nontemporal_P1_load_nxv8i16:
167 ; CHECK-RV64V: # %bb.0:
168 ; CHECK-RV64V-NEXT: ntl.p1
169 ; CHECK-RV64V-NEXT: vl2re16.v v8, (a0)
170 ; CHECK-RV64V-NEXT: ret
172 ; CHECK-RV32V-LABEL: test_nontemporal_P1_load_nxv8i16:
173 ; CHECK-RV32V: # %bb.0:
174 ; CHECK-RV32V-NEXT: ntl.p1
175 ; CHECK-RV32V-NEXT: vl2re16.v v8, (a0)
176 ; CHECK-RV32V-NEXT: ret
177 %1 = load <vscale x 8 x i16>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !1
178 ret <vscale x 8 x i16> %1
181 define <vscale x 16 x i8> @test_nontemporal_P1_load_nxv16i8(ptr %p) {
182 ; CHECK-RV64V-LABEL: test_nontemporal_P1_load_nxv16i8:
183 ; CHECK-RV64V: # %bb.0:
184 ; CHECK-RV64V-NEXT: ntl.p1
185 ; CHECK-RV64V-NEXT: vl2r.v v8, (a0)
186 ; CHECK-RV64V-NEXT: ret
188 ; CHECK-RV32V-LABEL: test_nontemporal_P1_load_nxv16i8:
189 ; CHECK-RV32V: # %bb.0:
190 ; CHECK-RV32V-NEXT: ntl.p1
191 ; CHECK-RV32V-NEXT: vl2r.v v8, (a0)
192 ; CHECK-RV32V-NEXT: ret
193 %1 = load <vscale x 16 x i8>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !1
194 ret <vscale x 16 x i8> %1
197 define void @test_nontemporal_P1_store_nxv2i64(ptr %p, <vscale x 2 x i64> %v) {
198 ; CHECK-RV64V-LABEL: test_nontemporal_P1_store_nxv2i64:
199 ; CHECK-RV64V: # %bb.0:
200 ; CHECK-RV64V-NEXT: ntl.p1
201 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
202 ; CHECK-RV64V-NEXT: ret
204 ; CHECK-RV32V-LABEL: test_nontemporal_P1_store_nxv2i64:
205 ; CHECK-RV32V: # %bb.0:
206 ; CHECK-RV32V-NEXT: ntl.p1
207 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
208 ; CHECK-RV32V-NEXT: ret
209 store <vscale x 2 x i64> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !1
213 define void @test_nontemporal_P1_store_nxv4i32(ptr %p, <vscale x 4 x i32> %v) {
214 ; CHECK-RV64V-LABEL: test_nontemporal_P1_store_nxv4i32:
215 ; CHECK-RV64V: # %bb.0:
216 ; CHECK-RV64V-NEXT: ntl.p1
217 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
218 ; CHECK-RV64V-NEXT: ret
220 ; CHECK-RV32V-LABEL: test_nontemporal_P1_store_nxv4i32:
221 ; CHECK-RV32V: # %bb.0:
222 ; CHECK-RV32V-NEXT: ntl.p1
223 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
224 ; CHECK-RV32V-NEXT: ret
225 store <vscale x 4 x i32> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !1
229 define void @test_nontemporal_P1_store_nxv8i16(ptr %p, <vscale x 8 x i16> %v) {
230 ; CHECK-RV64V-LABEL: test_nontemporal_P1_store_nxv8i16:
231 ; CHECK-RV64V: # %bb.0:
232 ; CHECK-RV64V-NEXT: ntl.p1
233 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
234 ; CHECK-RV64V-NEXT: ret
236 ; CHECK-RV32V-LABEL: test_nontemporal_P1_store_nxv8i16:
237 ; CHECK-RV32V: # %bb.0:
238 ; CHECK-RV32V-NEXT: ntl.p1
239 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
240 ; CHECK-RV32V-NEXT: ret
241 store <vscale x 8 x i16> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !1
245 define void @test_nontemporal_P1_store_nxv16i8(ptr %p, <vscale x 16 x i8> %v) {
246 ; CHECK-RV64V-LABEL: test_nontemporal_P1_store_nxv16i8:
247 ; CHECK-RV64V: # %bb.0:
248 ; CHECK-RV64V-NEXT: ntl.p1
249 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
250 ; CHECK-RV64V-NEXT: ret
252 ; CHECK-RV32V-LABEL: test_nontemporal_P1_store_nxv16i8:
253 ; CHECK-RV32V: # %bb.0:
254 ; CHECK-RV32V-NEXT: ntl.p1
255 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
256 ; CHECK-RV32V-NEXT: ret
257 store <vscale x 16 x i8> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !1
261 define <vscale x 2 x i64> @test_nontemporal_PALL_load_nxv2i64(ptr %p) {
262 ; CHECK-RV64V-LABEL: test_nontemporal_PALL_load_nxv2i64:
263 ; CHECK-RV64V: # %bb.0:
264 ; CHECK-RV64V-NEXT: ntl.pall
265 ; CHECK-RV64V-NEXT: vl2re64.v v8, (a0)
266 ; CHECK-RV64V-NEXT: ret
268 ; CHECK-RV32V-LABEL: test_nontemporal_PALL_load_nxv2i64:
269 ; CHECK-RV32V: # %bb.0:
270 ; CHECK-RV32V-NEXT: ntl.pall
271 ; CHECK-RV32V-NEXT: vl2re64.v v8, (a0)
272 ; CHECK-RV32V-NEXT: ret
273 %1 = load <vscale x 2 x i64>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !2
274 ret <vscale x 2 x i64> %1
277 define <vscale x 4 x i32> @test_nontemporal_PALL_load_nxv4i32(ptr %p) {
278 ; CHECK-RV64V-LABEL: test_nontemporal_PALL_load_nxv4i32:
279 ; CHECK-RV64V: # %bb.0:
280 ; CHECK-RV64V-NEXT: ntl.pall
281 ; CHECK-RV64V-NEXT: vl2re32.v v8, (a0)
282 ; CHECK-RV64V-NEXT: ret
284 ; CHECK-RV32V-LABEL: test_nontemporal_PALL_load_nxv4i32:
285 ; CHECK-RV32V: # %bb.0:
286 ; CHECK-RV32V-NEXT: ntl.pall
287 ; CHECK-RV32V-NEXT: vl2re32.v v8, (a0)
288 ; CHECK-RV32V-NEXT: ret
289 %1 = load <vscale x 4 x i32>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !2
290 ret <vscale x 4 x i32> %1
293 define <vscale x 8 x i16> @test_nontemporal_PALL_load_nxv8i16(ptr %p) {
294 ; CHECK-RV64V-LABEL: test_nontemporal_PALL_load_nxv8i16:
295 ; CHECK-RV64V: # %bb.0:
296 ; CHECK-RV64V-NEXT: ntl.pall
297 ; CHECK-RV64V-NEXT: vl2re16.v v8, (a0)
298 ; CHECK-RV64V-NEXT: ret
300 ; CHECK-RV32V-LABEL: test_nontemporal_PALL_load_nxv8i16:
301 ; CHECK-RV32V: # %bb.0:
302 ; CHECK-RV32V-NEXT: ntl.pall
303 ; CHECK-RV32V-NEXT: vl2re16.v v8, (a0)
304 ; CHECK-RV32V-NEXT: ret
305 %1 = load <vscale x 8 x i16>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !2
306 ret <vscale x 8 x i16> %1
309 define <vscale x 16 x i8> @test_nontemporal_PALL_load_nxv16i8(ptr %p) {
310 ; CHECK-RV64V-LABEL: test_nontemporal_PALL_load_nxv16i8:
311 ; CHECK-RV64V: # %bb.0:
312 ; CHECK-RV64V-NEXT: ntl.pall
313 ; CHECK-RV64V-NEXT: vl2r.v v8, (a0)
314 ; CHECK-RV64V-NEXT: ret
316 ; CHECK-RV32V-LABEL: test_nontemporal_PALL_load_nxv16i8:
317 ; CHECK-RV32V: # %bb.0:
318 ; CHECK-RV32V-NEXT: ntl.pall
319 ; CHECK-RV32V-NEXT: vl2r.v v8, (a0)
320 ; CHECK-RV32V-NEXT: ret
321 %1 = load <vscale x 16 x i8>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !2
322 ret <vscale x 16 x i8> %1
325 define void @test_nontemporal_PALL_store_nxv2i64(ptr %p, <vscale x 2 x i64> %v) {
326 ; CHECK-RV64V-LABEL: test_nontemporal_PALL_store_nxv2i64:
327 ; CHECK-RV64V: # %bb.0:
328 ; CHECK-RV64V-NEXT: ntl.pall
329 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
330 ; CHECK-RV64V-NEXT: ret
332 ; CHECK-RV32V-LABEL: test_nontemporal_PALL_store_nxv2i64:
333 ; CHECK-RV32V: # %bb.0:
334 ; CHECK-RV32V-NEXT: ntl.pall
335 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
336 ; CHECK-RV32V-NEXT: ret
337 store <vscale x 2 x i64> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !2
341 define void @test_nontemporal_PALL_store_nxv4i32(ptr %p, <vscale x 4 x i32> %v) {
342 ; CHECK-RV64V-LABEL: test_nontemporal_PALL_store_nxv4i32:
343 ; CHECK-RV64V: # %bb.0:
344 ; CHECK-RV64V-NEXT: ntl.pall
345 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
346 ; CHECK-RV64V-NEXT: ret
348 ; CHECK-RV32V-LABEL: test_nontemporal_PALL_store_nxv4i32:
349 ; CHECK-RV32V: # %bb.0:
350 ; CHECK-RV32V-NEXT: ntl.pall
351 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
352 ; CHECK-RV32V-NEXT: ret
353 store <vscale x 4 x i32> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !2
357 define void @test_nontemporal_PALL_store_nxv8i16(ptr %p, <vscale x 8 x i16> %v) {
358 ; CHECK-RV64V-LABEL: test_nontemporal_PALL_store_nxv8i16:
359 ; CHECK-RV64V: # %bb.0:
360 ; CHECK-RV64V-NEXT: ntl.pall
361 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
362 ; CHECK-RV64V-NEXT: ret
364 ; CHECK-RV32V-LABEL: test_nontemporal_PALL_store_nxv8i16:
365 ; CHECK-RV32V: # %bb.0:
366 ; CHECK-RV32V-NEXT: ntl.pall
367 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
368 ; CHECK-RV32V-NEXT: ret
369 store <vscale x 8 x i16> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !2
373 define void @test_nontemporal_PALL_store_nxv16i8(ptr %p, <vscale x 16 x i8> %v) {
374 ; CHECK-RV64V-LABEL: test_nontemporal_PALL_store_nxv16i8:
375 ; CHECK-RV64V: # %bb.0:
376 ; CHECK-RV64V-NEXT: ntl.pall
377 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
378 ; CHECK-RV64V-NEXT: ret
380 ; CHECK-RV32V-LABEL: test_nontemporal_PALL_store_nxv16i8:
381 ; CHECK-RV32V: # %bb.0:
382 ; CHECK-RV32V-NEXT: ntl.pall
383 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
384 ; CHECK-RV32V-NEXT: ret
385 store <vscale x 16 x i8> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !2
389 define <vscale x 2 x i64> @test_nontemporal_S1_load_nxv2i64(ptr %p) {
390 ; CHECK-RV64V-LABEL: test_nontemporal_S1_load_nxv2i64:
391 ; CHECK-RV64V: # %bb.0:
392 ; CHECK-RV64V-NEXT: ntl.s1
393 ; CHECK-RV64V-NEXT: vl2re64.v v8, (a0)
394 ; CHECK-RV64V-NEXT: ret
396 ; CHECK-RV32V-LABEL: test_nontemporal_S1_load_nxv2i64:
397 ; CHECK-RV32V: # %bb.0:
398 ; CHECK-RV32V-NEXT: ntl.s1
399 ; CHECK-RV32V-NEXT: vl2re64.v v8, (a0)
400 ; CHECK-RV32V-NEXT: ret
401 %1 = load <vscale x 2 x i64>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !3
402 ret <vscale x 2 x i64> %1
405 define <vscale x 4 x i32> @test_nontemporal_S1_load_nxv4i32(ptr %p) {
406 ; CHECK-RV64V-LABEL: test_nontemporal_S1_load_nxv4i32:
407 ; CHECK-RV64V: # %bb.0:
408 ; CHECK-RV64V-NEXT: ntl.s1
409 ; CHECK-RV64V-NEXT: vl2re32.v v8, (a0)
410 ; CHECK-RV64V-NEXT: ret
412 ; CHECK-RV32V-LABEL: test_nontemporal_S1_load_nxv4i32:
413 ; CHECK-RV32V: # %bb.0:
414 ; CHECK-RV32V-NEXT: ntl.s1
415 ; CHECK-RV32V-NEXT: vl2re32.v v8, (a0)
416 ; CHECK-RV32V-NEXT: ret
417 %1 = load <vscale x 4 x i32>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !3
418 ret <vscale x 4 x i32> %1
421 define <vscale x 8 x i16> @test_nontemporal_S1_load_nxv8i16(ptr %p) {
422 ; CHECK-RV64V-LABEL: test_nontemporal_S1_load_nxv8i16:
423 ; CHECK-RV64V: # %bb.0:
424 ; CHECK-RV64V-NEXT: ntl.s1
425 ; CHECK-RV64V-NEXT: vl2re16.v v8, (a0)
426 ; CHECK-RV64V-NEXT: ret
428 ; CHECK-RV32V-LABEL: test_nontemporal_S1_load_nxv8i16:
429 ; CHECK-RV32V: # %bb.0:
430 ; CHECK-RV32V-NEXT: ntl.s1
431 ; CHECK-RV32V-NEXT: vl2re16.v v8, (a0)
432 ; CHECK-RV32V-NEXT: ret
433 %1 = load <vscale x 8 x i16>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !3
434 ret <vscale x 8 x i16> %1
437 define <vscale x 16 x i8> @test_nontemporal_S1_load_nxv16i8(ptr %p) {
438 ; CHECK-RV64V-LABEL: test_nontemporal_S1_load_nxv16i8:
439 ; CHECK-RV64V: # %bb.0:
440 ; CHECK-RV64V-NEXT: ntl.s1
441 ; CHECK-RV64V-NEXT: vl2r.v v8, (a0)
442 ; CHECK-RV64V-NEXT: ret
444 ; CHECK-RV32V-LABEL: test_nontemporal_S1_load_nxv16i8:
445 ; CHECK-RV32V: # %bb.0:
446 ; CHECK-RV32V-NEXT: ntl.s1
447 ; CHECK-RV32V-NEXT: vl2r.v v8, (a0)
448 ; CHECK-RV32V-NEXT: ret
449 %1 = load <vscale x 16 x i8>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !3
450 ret <vscale x 16 x i8> %1
453 define void @test_nontemporal_S1_store_nxv2i64(ptr %p, <vscale x 2 x i64> %v) {
454 ; CHECK-RV64V-LABEL: test_nontemporal_S1_store_nxv2i64:
455 ; CHECK-RV64V: # %bb.0:
456 ; CHECK-RV64V-NEXT: ntl.s1
457 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
458 ; CHECK-RV64V-NEXT: ret
460 ; CHECK-RV32V-LABEL: test_nontemporal_S1_store_nxv2i64:
461 ; CHECK-RV32V: # %bb.0:
462 ; CHECK-RV32V-NEXT: ntl.s1
463 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
464 ; CHECK-RV32V-NEXT: ret
465 store <vscale x 2 x i64> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !3
469 define void @test_nontemporal_S1_store_nxv4i32(ptr %p, <vscale x 4 x i32> %v) {
470 ; CHECK-RV64V-LABEL: test_nontemporal_S1_store_nxv4i32:
471 ; CHECK-RV64V: # %bb.0:
472 ; CHECK-RV64V-NEXT: ntl.s1
473 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
474 ; CHECK-RV64V-NEXT: ret
476 ; CHECK-RV32V-LABEL: test_nontemporal_S1_store_nxv4i32:
477 ; CHECK-RV32V: # %bb.0:
478 ; CHECK-RV32V-NEXT: ntl.s1
479 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
480 ; CHECK-RV32V-NEXT: ret
481 store <vscale x 4 x i32> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !3
485 define void @test_nontemporal_S1_store_nxv8i16(ptr %p, <vscale x 8 x i16> %v) {
486 ; CHECK-RV64V-LABEL: test_nontemporal_S1_store_nxv8i16:
487 ; CHECK-RV64V: # %bb.0:
488 ; CHECK-RV64V-NEXT: ntl.s1
489 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
490 ; CHECK-RV64V-NEXT: ret
492 ; CHECK-RV32V-LABEL: test_nontemporal_S1_store_nxv8i16:
493 ; CHECK-RV32V: # %bb.0:
494 ; CHECK-RV32V-NEXT: ntl.s1
495 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
496 ; CHECK-RV32V-NEXT: ret
497 store <vscale x 8 x i16> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !3
501 define void @test_nontemporal_S1_store_nxv16i8(ptr %p, <vscale x 16 x i8> %v) {
502 ; CHECK-RV64V-LABEL: test_nontemporal_S1_store_nxv16i8:
503 ; CHECK-RV64V: # %bb.0:
504 ; CHECK-RV64V-NEXT: ntl.s1
505 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
506 ; CHECK-RV64V-NEXT: ret
508 ; CHECK-RV32V-LABEL: test_nontemporal_S1_store_nxv16i8:
509 ; CHECK-RV32V: # %bb.0:
510 ; CHECK-RV32V-NEXT: ntl.s1
511 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
512 ; CHECK-RV32V-NEXT: ret
513 store <vscale x 16 x i8> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !3
517 define <vscale x 2 x i64> @test_nontemporal_ALL_load_nxv2i64(ptr %p) {
518 ; CHECK-RV64V-LABEL: test_nontemporal_ALL_load_nxv2i64:
519 ; CHECK-RV64V: # %bb.0:
520 ; CHECK-RV64V-NEXT: ntl.all
521 ; CHECK-RV64V-NEXT: vl2re64.v v8, (a0)
522 ; CHECK-RV64V-NEXT: ret
524 ; CHECK-RV32V-LABEL: test_nontemporal_ALL_load_nxv2i64:
525 ; CHECK-RV32V: # %bb.0:
526 ; CHECK-RV32V-NEXT: ntl.all
527 ; CHECK-RV32V-NEXT: vl2re64.v v8, (a0)
528 ; CHECK-RV32V-NEXT: ret
529 %1 = load <vscale x 2 x i64>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !4
530 ret <vscale x 2 x i64> %1
533 define <vscale x 4 x i32> @test_nontemporal_ALL_load_nxv4i32(ptr %p) {
534 ; CHECK-RV64V-LABEL: test_nontemporal_ALL_load_nxv4i32:
535 ; CHECK-RV64V: # %bb.0:
536 ; CHECK-RV64V-NEXT: ntl.all
537 ; CHECK-RV64V-NEXT: vl2re32.v v8, (a0)
538 ; CHECK-RV64V-NEXT: ret
540 ; CHECK-RV32V-LABEL: test_nontemporal_ALL_load_nxv4i32:
541 ; CHECK-RV32V: # %bb.0:
542 ; CHECK-RV32V-NEXT: ntl.all
543 ; CHECK-RV32V-NEXT: vl2re32.v v8, (a0)
544 ; CHECK-RV32V-NEXT: ret
545 %1 = load <vscale x 4 x i32>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !4
546 ret <vscale x 4 x i32> %1
549 define <vscale x 8 x i16> @test_nontemporal_ALL_load_nxv8i16(ptr %p) {
550 ; CHECK-RV64V-LABEL: test_nontemporal_ALL_load_nxv8i16:
551 ; CHECK-RV64V: # %bb.0:
552 ; CHECK-RV64V-NEXT: ntl.all
553 ; CHECK-RV64V-NEXT: vl2re16.v v8, (a0)
554 ; CHECK-RV64V-NEXT: ret
556 ; CHECK-RV32V-LABEL: test_nontemporal_ALL_load_nxv8i16:
557 ; CHECK-RV32V: # %bb.0:
558 ; CHECK-RV32V-NEXT: ntl.all
559 ; CHECK-RV32V-NEXT: vl2re16.v v8, (a0)
560 ; CHECK-RV32V-NEXT: ret
561 %1 = load <vscale x 8 x i16>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !4
562 ret <vscale x 8 x i16> %1
565 define <vscale x 16 x i8> @test_nontemporal_ALL_load_nxv16i8(ptr %p) {
566 ; CHECK-RV64V-LABEL: test_nontemporal_ALL_load_nxv16i8:
567 ; CHECK-RV64V: # %bb.0:
568 ; CHECK-RV64V-NEXT: ntl.all
569 ; CHECK-RV64V-NEXT: vl2r.v v8, (a0)
570 ; CHECK-RV64V-NEXT: ret
572 ; CHECK-RV32V-LABEL: test_nontemporal_ALL_load_nxv16i8:
573 ; CHECK-RV32V: # %bb.0:
574 ; CHECK-RV32V-NEXT: ntl.all
575 ; CHECK-RV32V-NEXT: vl2r.v v8, (a0)
576 ; CHECK-RV32V-NEXT: ret
577 %1 = load <vscale x 16 x i8>, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !4
578 ret <vscale x 16 x i8> %1
581 define void @test_nontemporal_ALL_store_nxv2i64(ptr %p, <vscale x 2 x i64> %v) {
582 ; CHECK-RV64V-LABEL: test_nontemporal_ALL_store_nxv2i64:
583 ; CHECK-RV64V: # %bb.0:
584 ; CHECK-RV64V-NEXT: ntl.all
585 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
586 ; CHECK-RV64V-NEXT: ret
588 ; CHECK-RV32V-LABEL: test_nontemporal_ALL_store_nxv2i64:
589 ; CHECK-RV32V: # %bb.0:
590 ; CHECK-RV32V-NEXT: ntl.all
591 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
592 ; CHECK-RV32V-NEXT: ret
593 store <vscale x 2 x i64> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !4
597 define void @test_nontemporal_ALL_store_nxv4i32(ptr %p, <vscale x 4 x i32> %v) {
598 ; CHECK-RV64V-LABEL: test_nontemporal_ALL_store_nxv4i32:
599 ; CHECK-RV64V: # %bb.0:
600 ; CHECK-RV64V-NEXT: ntl.all
601 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
602 ; CHECK-RV64V-NEXT: ret
604 ; CHECK-RV32V-LABEL: test_nontemporal_ALL_store_nxv4i32:
605 ; CHECK-RV32V: # %bb.0:
606 ; CHECK-RV32V-NEXT: ntl.all
607 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
608 ; CHECK-RV32V-NEXT: ret
609 store <vscale x 4 x i32> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !4
613 define void @test_nontemporal_ALL_store_nxv8i16(ptr %p, <vscale x 8 x i16> %v) {
614 ; CHECK-RV64V-LABEL: test_nontemporal_ALL_store_nxv8i16:
615 ; CHECK-RV64V: # %bb.0:
616 ; CHECK-RV64V-NEXT: ntl.all
617 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
618 ; CHECK-RV64V-NEXT: ret
620 ; CHECK-RV32V-LABEL: test_nontemporal_ALL_store_nxv8i16:
621 ; CHECK-RV32V: # %bb.0:
622 ; CHECK-RV32V-NEXT: ntl.all
623 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
624 ; CHECK-RV32V-NEXT: ret
625 store <vscale x 8 x i16> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !4
629 define void @test_nontemporal_ALL_store_nxv16i8(ptr %p, <vscale x 16 x i8> %v) {
630 ; CHECK-RV64V-LABEL: test_nontemporal_ALL_store_nxv16i8:
631 ; CHECK-RV64V: # %bb.0:
632 ; CHECK-RV64V-NEXT: ntl.all
633 ; CHECK-RV64V-NEXT: vs2r.v v8, (a0)
634 ; CHECK-RV64V-NEXT: ret
636 ; CHECK-RV32V-LABEL: test_nontemporal_ALL_store_nxv16i8:
637 ; CHECK-RV32V: # %bb.0:
638 ; CHECK-RV32V-NEXT: ntl.all
639 ; CHECK-RV32V-NEXT: vs2r.v v8, (a0)
640 ; CHECK-RV32V-NEXT: ret
641 store <vscale x 16 x i8> %v, ptr %p, !nontemporal !0, !riscv-nontemporal-domain !4