[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / legalizer / rvv / legalize-splatvector-rv64.mir
blob8ccc23126eb81f65aa2cb93ee5de900df298d60f
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=riscv64 -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]+]]:_(s64) = G_CONSTANT i64 -1
12     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 1 x s1>) = G_VMSET_VL [[C]](s64)
13     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 1 x s1>) = G_VMCLR_VL [[C]](s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
30     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 1 x s1>) = G_VMSET_VL [[C]](s64)
31     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 1 x s1>) = G_VMSET_VL [[C]](s64)
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]+]]:_(s64) = COPY $x10
52     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
53     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]
54     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[AND]], [[C]]
55     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s8>) = G_SPLAT_VECTOR [[AND1]](s64)
56     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
57     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 1 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
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:_(s64) = COPY $x10
62     %1:_(s1) = G_TRUNC %0(s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
75     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMSET_VL [[C]](s64)
76     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMCLR_VL [[C]](s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
93     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMSET_VL [[C]](s64)
94     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 2 x s1>) = G_VMSET_VL [[C]](s64)
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]+]]:_(s64) = COPY $x10
115     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
116     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]
117     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[AND]], [[C]]
118     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s8>) = G_SPLAT_VECTOR [[AND1]](s64)
119     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
120     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 2 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
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:_(s64) = COPY $x10
125     %1:_(s1) = G_TRUNC %0(s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
138     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 4 x s1>) = G_VMSET_VL [[C]](s64)
139     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 4 x s1>) = G_VMCLR_VL [[C]](s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
156     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 4 x s1>) = G_VMSET_VL [[C]](s64)
157     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 4 x s1>) = G_VMSET_VL [[C]](s64)
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]+]]:_(s64) = COPY $x10
178     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
179     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]
180     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[AND]], [[C]]
181     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s8>) = G_SPLAT_VECTOR [[AND1]](s64)
182     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
183     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 4 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
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:_(s64) = COPY $x10
188     %1:_(s1) = G_TRUNC %0(s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
201     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 8 x s1>) = G_VMSET_VL [[C]](s64)
202     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 8 x s1>) = G_VMCLR_VL [[C]](s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
219     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 8 x s1>) = G_VMSET_VL [[C]](s64)
220     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 8 x s1>) = G_VMSET_VL [[C]](s64)
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]+]]:_(s64) = COPY $x10
241     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
242     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]
243     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[AND]], [[C]]
244     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s8>) = G_SPLAT_VECTOR [[AND1]](s64)
245     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
246     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 8 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
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:_(s64) = COPY $x10
251     %1:_(s1) = G_TRUNC %0(s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
264     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 16 x s1>) = G_VMSET_VL [[C]](s64)
265     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 16 x s1>) = G_VMCLR_VL [[C]](s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
282     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 16 x s1>) = G_VMSET_VL [[C]](s64)
283     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 16 x s1>) = G_VMSET_VL [[C]](s64)
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]+]]:_(s64) = COPY $x10
304     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
305     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]
306     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[AND]], [[C]]
307     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s8>) = G_SPLAT_VECTOR [[AND1]](s64)
308     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
309     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 16 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
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:_(s64) = COPY $x10
314     %1:_(s1) = G_TRUNC %0(s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
327     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 32 x s1>) = G_VMSET_VL [[C]](s64)
328     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 32 x s1>) = G_VMCLR_VL [[C]](s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
345     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 32 x s1>) = G_VMSET_VL [[C]](s64)
346     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 32 x s1>) = G_VMSET_VL [[C]](s64)
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]+]]:_(s64) = COPY $x10
367     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
368     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]
369     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[AND]], [[C]]
370     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 32 x s8>) = G_SPLAT_VECTOR [[AND1]](s64)
371     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
372     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 32 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
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:_(s64) = COPY $x10
377     %1:_(s1) = G_TRUNC %0(s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
390     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 64 x s1>) = G_VMSET_VL [[C]](s64)
391     ; CHECK-NEXT: [[VMCLR_VL:%[0-9]+]]:_(<vscale x 64 x s1>) = G_VMCLR_VL [[C]](s64)
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]+]]:_(s64) = G_CONSTANT i64 -1
408     ; CHECK-NEXT: [[VMSET_VL:%[0-9]+]]:_(<vscale x 64 x s1>) = G_VMSET_VL [[C]](s64)
409     ; CHECK-NEXT: [[VMSET_VL1:%[0-9]+]]:_(<vscale x 64 x s1>) = G_VMSET_VL [[C]](s64)
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]+]]:_(s64) = COPY $x10
430     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
431     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]
432     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[AND]], [[C]]
433     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 64 x s8>) = G_SPLAT_VECTOR [[AND1]](s64)
434     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
435     ; CHECK-NEXT: [[SPLAT_VECTOR1:%[0-9]+]]:_(<vscale x 64 x s8>) = G_SPLAT_VECTOR [[C1]](s64)
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:_(s64) = COPY $x10
440     %1:_(s1) = G_TRUNC %0(s64)
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]+]]:_(s64) = G_CONSTANT i64 0
454     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s8>) = G_SPLAT_VECTOR [[C]](s64)
455     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 1 x s8>)
456     ; CHECK-NEXT: PseudoRET implicit $v8
457     %0:_(<vscale x 1 x s8>) = G_IMPLICIT_DEF
458     %1:_(s8) = G_CONSTANT i8 0
459     %2:_(<vscale x 1 x s8>) = G_SPLAT_VECTOR %1(s8)
460     $v8 = COPY %2(<vscale x 1 x s8>)
461     PseudoRET implicit $v8
466 name:            splatvector_nxv2i8
467 legalized:       false
468 tracksRegLiveness: true
469 body:             |
470   bb.1:
471     ; CHECK-LABEL: name: splatvector_nxv2i8
472     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
473     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s8>) = G_SPLAT_VECTOR [[C]](s64)
474     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 2 x s8>)
475     ; CHECK-NEXT: PseudoRET implicit $v8
476     %0:_(<vscale x 2 x s8>) = G_IMPLICIT_DEF
477     %1:_(s8) = G_CONSTANT i8 0
478     %2:_(<vscale x 2 x s8>) = G_SPLAT_VECTOR %1(s8)
479     $v8 = COPY %2(<vscale x 2 x s8>)
480     PseudoRET implicit $v8
484 name:            splatvector_nxv4i8
485 legalized:       false
486 tracksRegLiveness: true
487 body:             |
488   bb.1:
489     ; CHECK-LABEL: name: splatvector_nxv4i8
490     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
491     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s8>) = G_SPLAT_VECTOR [[C]](s64)
492     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 4 x s8>)
493     ; CHECK-NEXT: PseudoRET implicit $v8
494     %0:_(<vscale x 4 x s8>) = G_IMPLICIT_DEF
495     %1:_(s8) = G_CONSTANT i8 0
496     %2:_(<vscale x 4 x s8>) = G_SPLAT_VECTOR %1(s8)
497     $v8 = COPY %2(<vscale x 4 x s8>)
498     PseudoRET implicit $v8
502 name:            splatvector_nxv8i8
503 legalized:       false
504 tracksRegLiveness: true
505 body:             |
506   bb.1:
507     ; CHECK-LABEL: name: splatvector_nxv8i8
508     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
509     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s8>) = G_SPLAT_VECTOR [[C]](s64)
510     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 8 x s8>)
511     ; CHECK-NEXT: PseudoRET implicit $v8
512     %0:_(<vscale x 8 x s8>) = G_IMPLICIT_DEF
513     %1:_(s8) = G_CONSTANT i8 0
514     %2:_(<vscale x 8 x s8>) = G_SPLAT_VECTOR %1(s8)
515     $v8 = COPY %2(<vscale x 8 x s8>)
516     PseudoRET implicit $v8
520 name:            splatvector_nxv16i8
521 legalized:       false
522 tracksRegLiveness: true
523 body:             |
524   bb.1:
525     ; CHECK-LABEL: name: splatvector_nxv16i8
526     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
527     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s8>) = G_SPLAT_VECTOR [[C]](s64)
528     ; CHECK-NEXT: $v8m2 = COPY [[SPLAT_VECTOR]](<vscale x 16 x s8>)
529     ; CHECK-NEXT: PseudoRET implicit $v8m2
530     %0:_(<vscale x 16 x s8>) = G_IMPLICIT_DEF
531     %1:_(s8) = G_CONSTANT i8 0
532     %2:_(<vscale x 16 x s8>) = G_SPLAT_VECTOR %1(s8)
533     $v8m2 = COPY %2(<vscale x 16 x s8>)
534     PseudoRET implicit $v8m2
538 name:            splatvector_nxv1i16
539 legalized:       false
540 tracksRegLiveness: true
541 body:             |
542   bb.1:
543     ; CHECK-LABEL: name: splatvector_nxv1i16
544     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
545     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s16>) = G_SPLAT_VECTOR [[C]](s64)
546     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 1 x s16>)
547     ; CHECK-NEXT: PseudoRET implicit $v8
548     %0:_(<vscale x 1 x s16>) = G_IMPLICIT_DEF
549     %1:_(s16) = G_CONSTANT i16 0
550     %2:_(<vscale x 1 x s16>) = G_SPLAT_VECTOR %1(s16)
551     $v8 = COPY %2(<vscale x 1 x s16>)
552     PseudoRET implicit $v8
556 name:            splatvector_nxv2i16
557 legalized:       false
558 tracksRegLiveness: true
559 body:             |
560   bb.1:
561     ; CHECK-LABEL: name: splatvector_nxv2i16
562     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
563     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s16>) = G_SPLAT_VECTOR [[C]](s64)
564     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 2 x s16>)
565     ; CHECK-NEXT: PseudoRET implicit $v8
566     %0:_(<vscale x 2 x s16>) = G_IMPLICIT_DEF
567     %1:_(s16) = G_CONSTANT i16 0
568     %2:_(<vscale x 2 x s16>) = G_SPLAT_VECTOR %1(s16)
569     $v8 = COPY %2(<vscale x 2 x s16>)
570     PseudoRET implicit $v8
574 name:            splatvector_nxv4i16
575 legalized:       false
576 tracksRegLiveness: true
577 body:             |
578   bb.1:
579     ; CHECK-LABEL: name: splatvector_nxv4i16
580     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
581     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s16>) = G_SPLAT_VECTOR [[C]](s64)
582     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 4 x s16>)
583     ; CHECK-NEXT: PseudoRET implicit $v8
584     %0:_(<vscale x 4 x s16>) = G_IMPLICIT_DEF
585     %1:_(s16) = G_CONSTANT i16 0
586     %2:_(<vscale x 4 x s16>) = G_SPLAT_VECTOR %1(s16)
587     $v8 = COPY %2(<vscale x 4 x s16>)
588     PseudoRET implicit $v8
592 name:            splatvector_nxv8i16
593 legalized:       false
594 tracksRegLiveness: true
595 body:             |
596   bb.1:
597     ; CHECK-LABEL: name: splatvector_nxv8i16
598     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
599     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s16>) = G_SPLAT_VECTOR [[C]](s64)
600     ; CHECK-NEXT: $v8m2 = COPY [[SPLAT_VECTOR]](<vscale x 8 x s16>)
601     ; CHECK-NEXT: PseudoRET implicit $v8m2
602     %0:_(<vscale x 8 x s16>) = G_IMPLICIT_DEF
603     %1:_(s16) = G_CONSTANT i16 0
604     %2:_(<vscale x 8 x s16>) = G_SPLAT_VECTOR %1(s16)
605     $v8m2 = COPY %2(<vscale x 8 x s16>)
606     PseudoRET implicit $v8m2
610 name:            splatvector_nxv16i16
611 legalized:       false
612 tracksRegLiveness: true
613 body:             |
614   bb.1:
615     ; CHECK-LABEL: name: splatvector_nxv16i16
616     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
617     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s16>) = G_SPLAT_VECTOR [[C]](s64)
618     ; CHECK-NEXT: $v8m4 = COPY [[SPLAT_VECTOR]](<vscale x 16 x s16>)
619     ; CHECK-NEXT: PseudoRET implicit $v8m4
620     %0:_(<vscale x 16 x s16>) = G_IMPLICIT_DEF
621     %1:_(s16) = G_CONSTANT i16 0
622     %2:_(<vscale x 16 x s16>) = G_SPLAT_VECTOR %1(s16)
623     $v8m4 = COPY %2(<vscale x 16 x s16>)
624     PseudoRET implicit $v8m4
628 name:            splatvector_nxv1i32
629 legalized:       false
630 tracksRegLiveness: true
631 body:             |
632   bb.1:
633     ; CHECK-LABEL: name: splatvector_nxv1i32
634     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
635     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s32>) = G_SPLAT_VECTOR [[C]](s64)
636     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 1 x s32>)
637     ; CHECK-NEXT: PseudoRET implicit $v8
638     %0:_(<vscale x 1 x s32>) = G_IMPLICIT_DEF
639     %1:_(s32) = G_CONSTANT i32 0
640     %2:_(<vscale x 1 x s32>) = G_SPLAT_VECTOR %1(s32)
641     $v8 = COPY %2(<vscale x 1 x s32>)
642     PseudoRET implicit $v8
646 name:            splatvector_nxv2i32
647 legalized:       false
648 tracksRegLiveness: true
649 body:             |
650   bb.1:
651     ; CHECK-LABEL: name: splatvector_nxv2i32
652     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
653     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR [[C]](s64)
654     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 2 x s32>)
655     ; CHECK-NEXT: PseudoRET implicit $v8
656     %0:_(<vscale x 2 x s32>) = G_IMPLICIT_DEF
657     %1:_(s32) = G_CONSTANT i32 0
658     %2:_(<vscale x 2 x s32>) = G_SPLAT_VECTOR %1(s32)
659     $v8 = COPY %2(<vscale x 2 x s32>)
660     PseudoRET implicit $v8
664 name:            splatvector_nxv4i32
665 legalized:       false
666 tracksRegLiveness: true
667 body:             |
668   bb.1:
669     ; CHECK-LABEL: name: splatvector_nxv4i32
670     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
671     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s32>) = G_SPLAT_VECTOR [[C]](s64)
672     ; CHECK-NEXT: $v8m2 = COPY [[SPLAT_VECTOR]](<vscale x 4 x s32>)
673     ; CHECK-NEXT: PseudoRET implicit $v8m2
674     %0:_(<vscale x 4 x s32>) = G_IMPLICIT_DEF
675     %1:_(s32) = G_CONSTANT i32 0
676     %2:_(<vscale x 4 x s32>) = G_SPLAT_VECTOR %1(s32)
677     $v8m2 = COPY %2(<vscale x 4 x s32>)
678     PseudoRET implicit $v8m2
682 name:            splatvector_nxv8i32
683 legalized:       false
684 tracksRegLiveness: true
685 body:             |
686   bb.1:
687     ; CHECK-LABEL: name: splatvector_nxv8i32
688     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
689     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s32>) = G_SPLAT_VECTOR [[C]](s64)
690     ; CHECK-NEXT: $v8m4 = COPY [[SPLAT_VECTOR]](<vscale x 8 x s32>)
691     ; CHECK-NEXT: PseudoRET implicit $v8m4
692     %0:_(<vscale x 8 x s32>) = G_IMPLICIT_DEF
693     %1:_(s32) = G_CONSTANT i32 0
694     %2:_(<vscale x 8 x s32>) = G_SPLAT_VECTOR %1(s32)
695     $v8m4 = COPY %2(<vscale x 8 x s32>)
696     PseudoRET implicit $v8m4
700 name:            splatvector_nxv16i32
701 legalized:       false
702 tracksRegLiveness: true
703 body:             |
704   bb.1:
705     ; CHECK-LABEL: name: splatvector_nxv16i32
706     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
707     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 16 x s32>) = G_SPLAT_VECTOR [[C]](s64)
708     ; CHECK-NEXT: $v8m8 = COPY [[SPLAT_VECTOR]](<vscale x 16 x s32>)
709     ; CHECK-NEXT: PseudoRET implicit $v8m8
710     %0:_(<vscale x 16 x s32>) = G_IMPLICIT_DEF
711     %1:_(s32) = G_CONSTANT i32 0
712     %2:_(<vscale x 16 x s32>) = G_SPLAT_VECTOR %1(s32)
713     $v8m8 = COPY %2(<vscale x 16 x s32>)
714     PseudoRET implicit $v8m8
718 name:            splatvector_nxv1i64
719 legalized:       false
720 tracksRegLiveness: true
721 body:             |
722   bb.1:
723     ; CHECK-LABEL: name: splatvector_nxv1i64
724     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
725     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 1 x s64>) = G_SPLAT_VECTOR [[C]](s64)
726     ; CHECK-NEXT: $v8 = COPY [[SPLAT_VECTOR]](<vscale x 1 x s64>)
727     ; CHECK-NEXT: PseudoRET implicit $v8
728     %0:_(<vscale x 1 x s64>) = G_IMPLICIT_DEF
729     %1:_(s64) = G_CONSTANT i64 0
730     %2:_(<vscale x 1 x s64>) = G_SPLAT_VECTOR %1(s64)
731     $v8 = COPY %2(<vscale x 1 x s64>)
732     PseudoRET implicit $v8
736 name:            splatvector_nxv2i64
737 legalized:       false
738 tracksRegLiveness: true
739 body:             |
740   bb.1:
741     ; CHECK-LABEL: name: splatvector_nxv2i64
742     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
743     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 2 x s64>) = G_SPLAT_VECTOR [[C]](s64)
744     ; CHECK-NEXT: $v8m2 = COPY [[SPLAT_VECTOR]](<vscale x 2 x s64>)
745     ; CHECK-NEXT: PseudoRET implicit $v8m2
746     %0:_(<vscale x 2 x s64>) = G_IMPLICIT_DEF
747     %1:_(s64) = G_CONSTANT i64 0
748     %2:_(<vscale x 2 x s64>) = G_SPLAT_VECTOR %1(s64)
749     $v8m2 = COPY %2(<vscale x 2 x s64>)
750     PseudoRET implicit $v8m2
754 name:            splatvector_nxv4i64
755 legalized:       false
756 tracksRegLiveness: true
757 body:             |
758   bb.1:
759     ; CHECK-LABEL: name: splatvector_nxv4i64
760     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
761     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 4 x s64>) = G_SPLAT_VECTOR [[C]](s64)
762     ; CHECK-NEXT: $v8m4 = COPY [[SPLAT_VECTOR]](<vscale x 4 x s64>)
763     ; CHECK-NEXT: PseudoRET implicit $v8m4
764     %0:_(<vscale x 4 x s64>) = G_IMPLICIT_DEF
765     %1:_(s64) = G_CONSTANT i64 0
766     %2:_(<vscale x 4 x s64>) = G_SPLAT_VECTOR %1(s64)
767     $v8m4 = COPY %2(<vscale x 4 x s64>)
768     PseudoRET implicit $v8m4
772 name:            splatvector_nxv8i64
773 legalized:       false
774 tracksRegLiveness: true
775 body:             |
776   bb.1:
777     ; CHECK-LABEL: name: splatvector_nxv8i64
778     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
779     ; CHECK-NEXT: [[SPLAT_VECTOR:%[0-9]+]]:_(<vscale x 8 x s64>) = G_SPLAT_VECTOR [[C]](s64)
780     ; CHECK-NEXT: $v8m8 = COPY [[SPLAT_VECTOR]](<vscale x 8 x s64>)
781     ; CHECK-NEXT: PseudoRET implicit $v8m8
782     %0:_(<vscale x 8 x s64>) = G_IMPLICIT_DEF
783     %1:_(s64) = G_CONSTANT i64 0
784     %2:_(<vscale x 8 x s64>) = G_SPLAT_VECTOR %1(s64)
785     $v8m8 = COPY %2(<vscale x 8 x s64>)
786     PseudoRET implicit $v8m8