[X86] IsNOT - don't fold not(pcmpgt(C1, C2)) -> pcmpgt(C2, C1 - 1)
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / legalizer / rvv / legalize-splatvector-rv32.mir
blob5b14dcd0b69054d2abad1397b04b5168da305e41
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=riscv32 -mattr=+v -run-pass=legalizer %s -o - | FileCheck %s
4 ---
5 name:            splatvector_nxv1i1_0
6 legalized:       false
7 tracksRegLiveness: true
8 body:             |
9   bb.1:
10     ; CHECK-LABEL: name: splatvector_nxv1i1_0
11     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
12     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 1 x s1>) = G_VMSET_VL [[C]](s32)
13     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 1 x s1>) = G_VMCLR_VL [[C]](s32)
14     ; CHECK-NEXT: $v0 = COPY [[VMCLR_VL]](<vscale x 1 x s1>)
15     ; CHECK-NEXT: PseudoRET implicit $v0
16     %0:_(s1) = G_CONSTANT i1 0
17     %1:_(<vscale x 1 x s1>) = G_SPLAT_VECTOR %0(s1)
18     $v0 = COPY %1(<vscale x 1 x s1>)
19     PseudoRET implicit $v0
21 ...
22 ---
23 name:            splatvector_nxv1i1_1
24 legalized:       false
25 tracksRegLiveness: true
26 body:             |
27   bb.1:
28     ; CHECK-LABEL: name: splatvector_nxv1i1_1
29     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
30     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 1 x s1>) = G_VMSET_VL [[C]](s32)
31     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 1 x s1>) = G_VMSET_VL [[C]](s32)
32     ; CHECK-NEXT: $v0 = COPY [[VMSET_VL1]](<vscale x 1 x s1>)
33     ; CHECK-NEXT: PseudoRET implicit $v0
34     %0:_(s1) = G_CONSTANT i1 1
35     %1:_(<vscale x 1 x s1>) = G_SPLAT_VECTOR %0(s1)
36     $v0 = COPY %1(<vscale x 1 x s1>)
37     PseudoRET implicit $v0
39 ...
40 ---
41 name:            splatvector_nxv1i1_2
42 legalized:       false
43 tracksRegLiveness: true
44 body:             |
45   bb.1:
46     liveins: $x10
48     ; CHECK-LABEL: name: splatvector_nxv1i1_2
49     ; CHECK: liveins: $x10
50     ; CHECK-NEXT: {{  $}}
51     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
52     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
53     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
54     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[AND]], [[C]]
55     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s8>) = G_SPLAT_VECTOR [[AND1]](s32)
56     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
57     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 1 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
58     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<vscale x 1 x s1>) = G_ICMP intpred(ne), [[SPLAT_VECTOR]](<vscale x 1 x s8>), [[SPLAT_VECTOR1]]
59     ; CHECK-NEXT: $v0 = COPY [[ICMP]](<vscale x 1 x s1>)
60     ; CHECK-NEXT: PseudoRET implicit $v0
61     %0:_(s32) = COPY $x10
62     %1:_(s1) = G_TRUNC %0(s32)
63     %2:_(<vscale x 1 x s1>) = G_SPLAT_VECTOR %1(s1)
64     $v0 = COPY %2(<vscale x 1 x s1>)
65     PseudoRET implicit $v0
66 ...
67 ---
68 name:            splatvector_nxv2i1_0
69 legalized:       false
70 tracksRegLiveness: true
71 body:             |
72   bb.1:
73     ; CHECK-LABEL: name: splatvector_nxv2i1_0
74     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
75     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMSET_VL [[C]](s32)
76     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMCLR_VL [[C]](s32)
77     ; CHECK-NEXT: $v0 = COPY [[VMCLR_VL]](<vscale x 2 x s1>)
78     ; CHECK-NEXT: PseudoRET implicit $v0
79     %0:_(s1) = G_CONSTANT i1 0
80     %1:_(<vscale x 2 x s1>) = G_SPLAT_VECTOR %0(s1)
81     $v0 = COPY %1(<vscale x 2 x s1>)
82     PseudoRET implicit $v0
84 ...
85 ---
86 name:            splatvector_nxv2i1_1
87 legalized:       false
88 tracksRegLiveness: true
89 body:             |
90   bb.1:
91     ; CHECK-LABEL: name: splatvector_nxv2i1_1
92     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
93     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMSET_VL [[C]](s32)
94     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMSET_VL [[C]](s32)
95     ; CHECK-NEXT: $v0 = COPY [[VMSET_VL1]](<vscale x 2 x s1>)
96     ; CHECK-NEXT: PseudoRET implicit $v0
97     %0:_(s1) = G_CONSTANT i1 1
98     %1:_(<vscale x 2 x s1>) = G_SPLAT_VECTOR %0(s1)
99     $v0 = COPY %1(<vscale x 2 x s1>)
100     PseudoRET implicit $v0
104 name:            splatvector_nxv2i1_2
105 legalized:       false
106 tracksRegLiveness: true
107 body:             |
108   bb.1:
109     liveins: $x10
111     ; CHECK-LABEL: name: splatvector_nxv2i1_2
112     ; CHECK: liveins: $x10
113     ; CHECK-NEXT: {{  $}}
114     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
115     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
116     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
117     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[AND]], [[C]]
118     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s8>) = G_SPLAT_VECTOR [[AND1]](s32)
119     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
120     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 2 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
121     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<vscale x 2 x s1>) = G_ICMP intpred(ne), [[SPLAT_VECTOR]](<vscale x 2 x s8>), [[SPLAT_VECTOR1]]
122     ; CHECK-NEXT: $v0 = COPY [[ICMP]](<vscale x 2 x s1>)
123     ; CHECK-NEXT: PseudoRET implicit $v0
124     %0:_(s32) = COPY $x10
125     %1:_(s1) = G_TRUNC %0(s32)
126     %2:_(<vscale x 2 x s1>) = G_SPLAT_VECTOR %1(s1)
127     $v0 = COPY %2(<vscale x 2 x s1>)
128     PseudoRET implicit $v0
131 name:            splatvector_nxv4i1_0
132 legalized:       false
133 tracksRegLiveness: true
134 body:             |
135   bb.1:
136     ; CHECK-LABEL: name: splatvector_nxv4i1_0
137     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
138     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 4 x s1>) = G_VMSET_VL [[C]](s32)
139     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 4 x s1>) = G_VMCLR_VL [[C]](s32)
140     ; CHECK-NEXT: $v0 = COPY [[VMCLR_VL]](<vscale x 4 x s1>)
141     ; CHECK-NEXT: PseudoRET implicit $v0
142     %0:_(s1) = G_CONSTANT i1 0
143     %1:_(<vscale x 4 x s1>) = G_SPLAT_VECTOR %0(s1)
144     $v0 = COPY %1(<vscale x 4 x s1>)
145     PseudoRET implicit $v0
149 name:            splatvector_nxv4i1_1
150 legalized:       false
151 tracksRegLiveness: true
152 body:             |
153   bb.1:
154     ; CHECK-LABEL: name: splatvector_nxv4i1_1
155     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
156     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 4 x s1>) = G_VMSET_VL [[C]](s32)
157     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 4 x s1>) = G_VMSET_VL [[C]](s32)
158     ; CHECK-NEXT: $v0 = COPY [[VMSET_VL1]](<vscale x 4 x s1>)
159     ; CHECK-NEXT: PseudoRET implicit $v0
160     %0:_(s1) = G_CONSTANT i1 1
161     %1:_(<vscale x 4 x s1>) = G_SPLAT_VECTOR %0(s1)
162     $v0 = COPY %1(<vscale x 4 x s1>)
163     PseudoRET implicit $v0
167 name:            splatvector_nxv4i1_2
168 legalized:       false
169 tracksRegLiveness: true
170 body:             |
171   bb.1:
172     liveins: $x10
174     ; CHECK-LABEL: name: splatvector_nxv4i1_2
175     ; CHECK: liveins: $x10
176     ; CHECK-NEXT: {{  $}}
177     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
178     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
179     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
180     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[AND]], [[C]]
181     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s8>) = G_SPLAT_VECTOR [[AND1]](s32)
182     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
183     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 4 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
184     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<vscale x 4 x s1>) = G_ICMP intpred(ne), [[SPLAT_VECTOR]](<vscale x 4 x s8>), [[SPLAT_VECTOR1]]
185     ; CHECK-NEXT: $v0 = COPY [[ICMP]](<vscale x 4 x s1>)
186     ; CHECK-NEXT: PseudoRET implicit $v0
187     %0:_(s32) = COPY $x10
188     %1:_(s1) = G_TRUNC %0(s32)
189     %2:_(<vscale x 4 x s1>) = G_SPLAT_VECTOR %1(s1)
190     $v0 = COPY %2(<vscale x 4 x s1>)
191     PseudoRET implicit $v0
194 name:            splatvector_nxv8i1_0
195 legalized:       false
196 tracksRegLiveness: true
197 body:             |
198   bb.1:
199     ; CHECK-LABEL: name: splatvector_nxv8i1_0
200     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
201     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 8 x s1>) = G_VMSET_VL [[C]](s32)
202     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 8 x s1>) = G_VMCLR_VL [[C]](s32)
203     ; CHECK-NEXT: $v0 = COPY [[VMCLR_VL]](<vscale x 8 x s1>)
204     ; CHECK-NEXT: PseudoRET implicit $v0
205     %0:_(s1) = G_CONSTANT i1 0
206     %1:_(<vscale x 8 x s1>) = G_SPLAT_VECTOR %0(s1)
207     $v0 = COPY %1(<vscale x 8 x s1>)
208     PseudoRET implicit $v0
212 name:            splatvector_nxv8i1_1
213 legalized:       false
214 tracksRegLiveness: true
215 body:             |
216   bb.1:
217     ; CHECK-LABEL: name: splatvector_nxv8i1_1
218     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
219     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 8 x s1>) = G_VMSET_VL [[C]](s32)
220     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 8 x s1>) = G_VMSET_VL [[C]](s32)
221     ; CHECK-NEXT: $v0 = COPY [[VMSET_VL1]](<vscale x 8 x s1>)
222     ; CHECK-NEXT: PseudoRET implicit $v0
223     %0:_(s1) = G_CONSTANT i1 1
224     %1:_(<vscale x 8 x s1>) = G_SPLAT_VECTOR %0(s1)
225     $v0 = COPY %1(<vscale x 8 x s1>)
226     PseudoRET implicit $v0
230 name:            splatvector_nxv8i1_2
231 legalized:       false
232 tracksRegLiveness: true
233 body:             |
234   bb.1:
235     liveins: $x10
237     ; CHECK-LABEL: name: splatvector_nxv8i1_2
238     ; CHECK: liveins: $x10
239     ; CHECK-NEXT: {{  $}}
240     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
241     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
242     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
243     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[AND]], [[C]]
244     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s8>) = G_SPLAT_VECTOR [[AND1]](s32)
245     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
246     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 8 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
247     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<vscale x 8 x s1>) = G_ICMP intpred(ne), [[SPLAT_VECTOR]](<vscale x 8 x s8>), [[SPLAT_VECTOR1]]
248     ; CHECK-NEXT: $v0 = COPY [[ICMP]](<vscale x 8 x s1>)
249     ; CHECK-NEXT: PseudoRET implicit $v0
250     %0:_(s32) = COPY $x10
251     %1:_(s1) = G_TRUNC %0(s32)
252     %2:_(<vscale x 8 x s1>) = G_SPLAT_VECTOR %1(s1)
253     $v0 = COPY %2(<vscale x 8 x s1>)
254     PseudoRET implicit $v0
257 name:            splatvector_nxv16i1_0
258 legalized:       false
259 tracksRegLiveness: true
260 body:             |
261   bb.1:
262     ; CHECK-LABEL: name: splatvector_nxv16i1_0
263     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
264     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 16 x s1>) = G_VMSET_VL [[C]](s32)
265     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 16 x s1>) = G_VMCLR_VL [[C]](s32)
266     ; CHECK-NEXT: $v0 = COPY [[VMCLR_VL]](<vscale x 16 x s1>)
267     ; CHECK-NEXT: PseudoRET implicit $v0
268     %0:_(s1) = G_CONSTANT i1 0
269     %1:_(<vscale x 16 x s1>) = G_SPLAT_VECTOR %0(s1)
270     $v0 = COPY %1(<vscale x 16 x s1>)
271     PseudoRET implicit $v0
275 name:            splatvector_nxv16i1_1
276 legalized:       false
277 tracksRegLiveness: true
278 body:             |
279   bb.1:
280     ; CHECK-LABEL: name: splatvector_nxv16i1_1
281     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
282     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 16 x s1>) = G_VMSET_VL [[C]](s32)
283     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 16 x s1>) = G_VMSET_VL [[C]](s32)
284     ; CHECK-NEXT: $v0 = COPY [[VMSET_VL1]](<vscale x 16 x s1>)
285     ; CHECK-NEXT: PseudoRET implicit $v0
286     %0:_(s1) = G_CONSTANT i1 1
287     %1:_(<vscale x 16 x s1>) = G_SPLAT_VECTOR %0(s1)
288     $v0 = COPY %1(<vscale x 16 x s1>)
289     PseudoRET implicit $v0
293 name:            splatvector_nxv16i1_2
294 legalized:       false
295 tracksRegLiveness: true
296 body:             |
297   bb.1:
298     liveins: $x10
300     ; CHECK-LABEL: name: splatvector_nxv16i1_2
301     ; CHECK: liveins: $x10
302     ; CHECK-NEXT: {{  $}}
303     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
304     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
305     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
306     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[AND]], [[C]]
307     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s8>) = G_SPLAT_VECTOR [[AND1]](s32)
308     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
309     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 16 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
310     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<vscale x 16 x s1>) = G_ICMP intpred(ne), [[SPLAT_VECTOR]](<vscale x 16 x s8>), [[SPLAT_VECTOR1]]
311     ; CHECK-NEXT: $v0 = COPY [[ICMP]](<vscale x 16 x s1>)
312     ; CHECK-NEXT: PseudoRET implicit $v0
313     %0:_(s32) = COPY $x10
314     %1:_(s1) = G_TRUNC %0(s32)
315     %2:_(<vscale x 16 x s1>) = G_SPLAT_VECTOR %1(s1)
316     $v0 = COPY %2(<vscale x 16 x s1>)
317     PseudoRET implicit $v0
320 name:            splatvector_nxv32i1_0
321 legalized:       false
322 tracksRegLiveness: true
323 body:             |
324   bb.1:
325     ; CHECK-LABEL: name: splatvector_nxv32i1_0
326     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
327     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 32 x s1>) = G_VMSET_VL [[C]](s32)
328     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 32 x s1>) = G_VMCLR_VL [[C]](s32)
329     ; CHECK-NEXT: $v0 = COPY [[VMCLR_VL]](<vscale x 32 x s1>)
330     ; CHECK-NEXT: PseudoRET implicit $v0
331     %0:_(s1) = G_CONSTANT i1 0
332     %1:_(<vscale x 32 x s1>) = G_SPLAT_VECTOR %0(s1)
333     $v0 = COPY %1(<vscale x 32 x s1>)
334     PseudoRET implicit $v0
338 name:            splatvector_nxv32i1_1
339 legalized:       false
340 tracksRegLiveness: true
341 body:             |
342   bb.1:
343     ; CHECK-LABEL: name: splatvector_nxv32i1_1
344     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
345     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 32 x s1>) = G_VMSET_VL [[C]](s32)
346     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 32 x s1>) = G_VMSET_VL [[C]](s32)
347     ; CHECK-NEXT: $v0 = COPY [[VMSET_VL1]](<vscale x 32 x s1>)
348     ; CHECK-NEXT: PseudoRET implicit $v0
349     %0:_(s1) = G_CONSTANT i1 1
350     %1:_(<vscale x 32 x s1>) = G_SPLAT_VECTOR %0(s1)
351     $v0 = COPY %1(<vscale x 32 x s1>)
352     PseudoRET implicit $v0
356 name:            splatvector_nxv32i1_2
357 legalized:       false
358 tracksRegLiveness: true
359 body:             |
360   bb.1:
361     liveins: $x10
363     ; CHECK-LABEL: name: splatvector_nxv32i1_2
364     ; CHECK: liveins: $x10
365     ; CHECK-NEXT: {{  $}}
366     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
367     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
368     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
369     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[AND]], [[C]]
370     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 32 x s8>) = G_SPLAT_VECTOR [[AND1]](s32)
371     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
372     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 32 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
373     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<vscale x 32 x s1>) = G_ICMP intpred(ne), [[SPLAT_VECTOR]](<vscale x 32 x s8>), [[SPLAT_VECTOR1]]
374     ; CHECK-NEXT: $v0 = COPY [[ICMP]](<vscale x 32 x s1>)
375     ; CHECK-NEXT: PseudoRET implicit $v0
376     %0:_(s32) = COPY $x10
377     %1:_(s1) = G_TRUNC %0(s32)
378     %2:_(<vscale x 32 x s1>) = G_SPLAT_VECTOR %1(s1)
379     $v0 = COPY %2(<vscale x 32 x s1>)
380     PseudoRET implicit $v0
383 name:            splatvector_nxv64i1_0
384 legalized:       false
385 tracksRegLiveness: true
386 body:             |
387   bb.1:
388     ; CHECK-LABEL: name: splatvector_nxv64i1_0
389     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
390     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 64 x s1>) = G_VMSET_VL [[C]](s32)
391     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 64 x s1>) = G_VMCLR_VL [[C]](s32)
392     ; CHECK-NEXT: $v0 = COPY [[VMCLR_VL]](<vscale x 64 x s1>)
393     ; CHECK-NEXT: PseudoRET implicit $v0
394     %0:_(s1) = G_CONSTANT i1 0
395     %1:_(<vscale x 64 x s1>) = G_SPLAT_VECTOR %0(s1)
396     $v0 = COPY %1(<vscale x 64 x s1>)
397     PseudoRET implicit $v0
401 name:            splatvector_nxv64i1_1
402 legalized:       false
403 tracksRegLiveness: true
404 body:             |
405   bb.1:
406     ; CHECK-LABEL: name: splatvector_nxv64i1_1
407     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1
408     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 64 x s1>) = G_VMSET_VL [[C]](s32)
409     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 64 x s1>) = G_VMSET_VL [[C]](s32)
410     ; CHECK-NEXT: $v0 = COPY [[VMSET_VL1]](<vscale x 64 x s1>)
411     ; CHECK-NEXT: PseudoRET implicit $v0
412     %0:_(s1) = G_CONSTANT i1 1
413     %1:_(<vscale x 64 x s1>) = G_SPLAT_VECTOR %0(s1)
414     $v0 = COPY %1(<vscale x 64 x s1>)
415     PseudoRET implicit $v0
419 name:            splatvector_nxv64i1_2
420 legalized:       false
421 tracksRegLiveness: true
422 body:             |
423   bb.1:
424     liveins: $x10
426     ; CHECK-LABEL: name: splatvector_nxv64i1_2
427     ; CHECK: liveins: $x10
428     ; CHECK-NEXT: {{  $}}
429     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
430     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
431     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
432     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[AND]], [[C]]
433     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 64 x s8>) = G_SPLAT_VECTOR [[AND1]](s32)
434     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
435     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 64 x s8>) = G_SPLAT_VECTOR [[C1]](s32)
436     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<vscale x 64 x s1>) = G_ICMP intpred(ne), [[SPLAT_VECTOR]](<vscale x 64 x s8>), [[SPLAT_VECTOR1]]
437     ; CHECK-NEXT: $v0 = COPY [[ICMP]](<vscale x 64 x s1>)
438     ; CHECK-NEXT: PseudoRET implicit $v0
439     %0:_(s32) = COPY $x10
440     %1:_(s1) = G_TRUNC %0(s32)
441     %2:_(<vscale x 64 x s1>) = G_SPLAT_VECTOR %1(s1)
442     $v0 = COPY %2(<vscale x 64 x s1>)
443     PseudoRET implicit $v0
447 name:            splatvector_nxv1i8
448 legalized:       false
449 tracksRegLiveness: true
450 body:             |
451   bb.1:
452     ; CHECK-LABEL: name: splatvector_nxv1i8
453     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
454     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s8>) = G_SPLAT_VECTOR [[C]](s32)
455     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 1 x s8>)
456     ; CHECK-NEXT: PseudoRET implicit $v8
457     %1:_(s8) = G_CONSTANT i8 0
458     %2:_(<vscale x 1 x s8>) = G_SPLAT_VECTOR %1(s8)
459     $v8 = COPY %2(<vscale x 1 x s8>)
460     PseudoRET implicit $v8
465 name:            splatvector_nxv2i8
466 legalized:       false
467 tracksRegLiveness: true
468 body:             |
469   bb.1:
470     ; CHECK-LABEL: name: splatvector_nxv2i8
471     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
472     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s8>) = G_SPLAT_VECTOR [[C]](s32)
473     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 2 x s8>)
474     ; CHECK-NEXT: PseudoRET implicit $v8
475     %1:_(s8) = G_CONSTANT i8 0
476     %2:_(<vscale x 2 x s8>) = G_SPLAT_VECTOR %1(s8)
477     $v8 = COPY %2(<vscale x 2 x s8>)
478     PseudoRET implicit $v8
482 name:            splatvector_nxv4i8
483 legalized:       false
484 tracksRegLiveness: true
485 body:             |
486   bb.1:
487     ; CHECK-LABEL: name: splatvector_nxv4i8
488     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
489     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s8>) = G_SPLAT_VECTOR [[C]](s32)
490     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 4 x s8>)
491     ; CHECK-NEXT: PseudoRET implicit $v8
492     %1:_(s8) = G_CONSTANT i8 0
493     %2:_(<vscale x 4 x s8>) = G_SPLAT_VECTOR %1(s8)
494     $v8 = COPY %2(<vscale x 4 x s8>)
495     PseudoRET implicit $v8
499 name:            splatvector_nxv8i8
500 legalized:       false
501 tracksRegLiveness: true
502 body:             |
503   bb.1:
504     ; CHECK-LABEL: name: splatvector_nxv8i8
505     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
506     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s8>) = G_SPLAT_VECTOR [[C]](s32)
507     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 8 x s8>)
508     ; CHECK-NEXT: PseudoRET implicit $v8
509     %1:_(s8) = G_CONSTANT i8 0
510     %2:_(<vscale x 8 x s8>) = G_SPLAT_VECTOR %1(s8)
511     $v8 = COPY %2(<vscale x 8 x s8>)
512     PseudoRET implicit $v8
516 name:            splatvector_nxv16i8
517 legalized:       false
518 tracksRegLiveness: true
519 body:             |
520   bb.1:
521     ; CHECK-LABEL: name: splatvector_nxv16i8
522     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
523     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s8>) = G_SPLAT_VECTOR [[C]](s32)
524     ; CHECK-NEXT: $v8m2 = COPY [[SPLAT_VECTOR]](<vscale x 16 x s8>)
525     ; CHECK-NEXT: PseudoRET implicit $v8m2
526     %1:_(s8) = G_CONSTANT i8 0
527     %2:_(<vscale x 16 x s8>) = G_SPLAT_VECTOR %1(s8)
528     $v8m2 = COPY %2(<vscale x 16 x s8>)
529     PseudoRET implicit $v8m2
533 name:            splatvector_nxv1i16
534 legalized:       false
535 tracksRegLiveness: true
536 body:             |
537   bb.1:
538     ; CHECK-LABEL: name: splatvector_nxv1i16
539     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
540     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s16>) = G_SPLAT_VECTOR [[C]](s32)
541     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 1 x s16>)
542     ; CHECK-NEXT: PseudoRET implicit $v8
543     %1:_(s16) = G_CONSTANT i16 0
544     %2:_(<vscale x 1 x s16>) = G_SPLAT_VECTOR %1(s16)
545     $v8 = COPY %2(<vscale x 1 x s16>)
546     PseudoRET implicit $v8
550 name:            splatvector_nxv2i16
551 legalized:       false
552 tracksRegLiveness: true
553 body:             |
554   bb.1:
555     ; CHECK-LABEL: name: splatvector_nxv2i16
556     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
557     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s16>) = G_SPLAT_VECTOR [[C]](s32)
558     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 2 x s16>)
559     ; CHECK-NEXT: PseudoRET implicit $v8
560     %1:_(s16) = G_CONSTANT i16 0
561     %2:_(<vscale x 2 x s16>) = G_SPLAT_VECTOR %1(s16)
562     $v8 = COPY %2(<vscale x 2 x s16>)
563     PseudoRET implicit $v8
567 name:            splatvector_nxv4i16
568 legalized:       false
569 tracksRegLiveness: true
570 body:             |
571   bb.1:
572     ; CHECK-LABEL: name: splatvector_nxv4i16
573     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
574     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s16>) = G_SPLAT_VECTOR [[C]](s32)
575     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 4 x s16>)
576     ; CHECK-NEXT: PseudoRET implicit $v8
577     %1:_(s16) = G_CONSTANT i16 0
578     %2:_(<vscale x 4 x s16>) = G_SPLAT_VECTOR %1(s16)
579     $v8 = COPY %2(<vscale x 4 x s16>)
580     PseudoRET implicit $v8
584 name:            splatvector_nxv8i16
585 legalized:       false
586 tracksRegLiveness: true
587 body:             |
588   bb.1:
589     ; CHECK-LABEL: name: splatvector_nxv8i16
590     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
591     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s16>) = G_SPLAT_VECTOR [[C]](s32)
592     ; CHECK-NEXT: $v8m2 = COPY [[SPLAT_VECTOR]](<vscale x 8 x s16>)
593     ; CHECK-NEXT: PseudoRET implicit $v8m2
594     %1:_(s16) = G_CONSTANT i16 0
595     %2:_(<vscale x 8 x s16>) = G_SPLAT_VECTOR %1(s16)
596     $v8m2 = COPY %2(<vscale x 8 x s16>)
597     PseudoRET implicit $v8m2
601 name:            splatvector_nxv16i16
602 legalized:       false
603 tracksRegLiveness: true
604 body:             |
605   bb.1:
606     ; CHECK-LABEL: name: splatvector_nxv16i16
607     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
608     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s16>) = G_SPLAT_VECTOR [[C]](s32)
609     ; CHECK-NEXT: $v8m4 = COPY [[SPLAT_VECTOR]](<vscale x 16 x s16>)
610     ; CHECK-NEXT: PseudoRET implicit $v8m4
611     %1:_(s16) = G_CONSTANT i16 0
612     %2:_(<vscale x 16 x s16>) = G_SPLAT_VECTOR %1(s16)
613     $v8m4 = COPY %2(<vscale x 16 x s16>)
614     PseudoRET implicit $v8m4
618 name:            splatvector_nxv1i32
619 legalized:       false
620 tracksRegLiveness: true
621 body:             |
622   bb.1:
623     ; CHECK-LABEL: name: splatvector_nxv1i32
624     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
625     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s32>) = G_SPLAT_VECTOR [[C]](s32)
626     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 1 x s32>)
627     ; CHECK-NEXT: PseudoRET implicit $v8
628     %1:_(s32) = G_CONSTANT i32 0
629     %2:_(<vscale x 1 x s32>) = G_SPLAT_VECTOR %1(s32)
630     $v8 = COPY %2(<vscale x 1 x s32>)
631     PseudoRET implicit $v8
635 name:            splatvector_nxv2i32
636 legalized:       false
637 tracksRegLiveness: true
638 body:             |
639   bb.1:
640     ; CHECK-LABEL: name: splatvector_nxv2i32
641     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
642     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR [[C]](s32)
643     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 2 x s32>)
644     ; CHECK-NEXT: PseudoRET implicit $v8
645     %1:_(s32) = G_CONSTANT i32 0
646     %2:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR %1(s32)
647     $v8 = COPY %2(<vscale x 2 x s32>)
648     PseudoRET implicit $v8
652 name:            splatvector_nxv4i32
653 legalized:       false
654 tracksRegLiveness: true
655 body:             |
656   bb.1:
657     ; CHECK-LABEL: name: splatvector_nxv4i32
658     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
659     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s32>) = G_SPLAT_VECTOR [[C]](s32)
660     ; CHECK-NEXT: $v8m2 = COPY [[SPLAT_VECTOR]](<vscale x 4 x s32>)
661     ; CHECK-NEXT: PseudoRET implicit $v8m2
662     %1:_(s32) = G_CONSTANT i32 0
663     %2:_(<vscale x 4 x s32>) = G_SPLAT_VECTOR %1(s32)
664     $v8m2 = COPY %2(<vscale x 4 x s32>)
665     PseudoRET implicit $v8m2
669 name:            splatvector_nxv8i32
670 legalized:       false
671 tracksRegLiveness: true
672 body:             |
673   bb.1:
674     ; CHECK-LABEL: name: splatvector_nxv8i32
675     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
676     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s32>) = G_SPLAT_VECTOR [[C]](s32)
677     ; CHECK-NEXT: $v8m4 = COPY [[SPLAT_VECTOR]](<vscale x 8 x s32>)
678     ; CHECK-NEXT: PseudoRET implicit $v8m4
679     %1:_(s32) = G_CONSTANT i32 0
680     %2:_(<vscale x 8 x s32>) = G_SPLAT_VECTOR %1(s32)
681     $v8m4 = COPY %2(<vscale x 8 x s32>)
682     PseudoRET implicit $v8m4
686 name:            splatvector_nxv16i32
687 legalized:       false
688 tracksRegLiveness: true
689 body:             |
690   bb.1:
691     ; CHECK-LABEL: name: splatvector_nxv16i32
692     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
693     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s32>) = G_SPLAT_VECTOR [[C]](s32)
694     ; CHECK-NEXT: $v8m8 = COPY [[SPLAT_VECTOR]](<vscale x 16 x s32>)
695     ; CHECK-NEXT: PseudoRET implicit $v8m8
696     %1:_(s32) = G_CONSTANT i32 0
697     %2:_(<vscale x 16 x s32>) = G_SPLAT_VECTOR %1(s32)
698     $v8m8 = COPY %2(<vscale x 16 x s32>)
699     PseudoRET implicit $v8m8