Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / nontemporal-scalable.ll
blob460a1d94b6871bf47a9191b9e45407c5e55538a7
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
82   ret void
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
98   ret void
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
114   ret void
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
130   ret void
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
210   ret void
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
226   ret void
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
242   ret void
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
258   ret void
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
338   ret void
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
354   ret void
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
370   ret void
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
386   ret void
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
466   ret void
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
482   ret void
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
498   ret void
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
514   ret void
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
594   ret void
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
610   ret void
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
626   ret void
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
642   ret void
645 !0 = !{i32 1}
646 !1 = !{i32 2}
647 !2 = !{i32 3}
648 !3 = !{i32 4}
649 !4 = !{i32 5}