[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / regbankselect-and.mir
blobbd0cde1bbcccda95914df1aecd64149df516adbb
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-fast | FileCheck %s
3 # RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-greedy | FileCheck %s
5 ---
6 name: and_s32_ss
7 legalized: true
9 body: |
10   bb.0:
11     liveins: $sgpr0, $sgpr1
12     ; CHECK-LABEL: name: and_s32_ss
13     ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
14     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
15     ; CHECK: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[COPY]], [[COPY1]]
16     %0:_(s32) = COPY $sgpr0
17     %1:_(s32) = COPY $sgpr1
18     %2:_(s32) = G_AND %0, %1
19 ...
21 ---
22 name: and_s32_sv
23 legalized: true
25 body: |
26   bb.0:
27     liveins: $sgpr0, $vgpr0
28     ; CHECK-LABEL: name: and_s32_sv
29     ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
30     ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
31     ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
32     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY2]], [[COPY1]]
33     %0:_(s32) = COPY $sgpr0
34     %1:_(s32) = COPY $vgpr0
35     %2:_(s32) = G_AND %0, %1
36 ...
38 ---
39 name: and_s32_vs
40 legalized: true
42 body: |
43   bb.0:
44     liveins: $sgpr0, $vgpr0
45     ; CHECK-LABEL: name: and_s32_vs
46     ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
47     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
48     ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
49     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[COPY2]]
50     %0:_(s32) = COPY $vgpr0
51     %1:_(s32) = COPY $sgpr0
52     %2:_(s32) = G_AND %0, %1
53 ...
55 ---
56 name: and_s32_vv
57 legalized: true
59 body: |
60   bb.0:
61     liveins: $vgpr0, $vgpr1
62     ; CHECK-LABEL: name: and_s32_vv
63     ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
64     ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
65     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[COPY1]]
66     %0:_(s32) = COPY $vgpr0
67     %1:_(s32) = COPY $vgpr1
68     %2:_(s32) = G_AND %0, %1
69 ...
71 ---
72 name: and_s64_ss
73 legalized: true
75 body: |
76   bb.0:
77     liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
78     ; CHECK-LABEL: name: and_s64_ss
79     ; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
80     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
81     ; CHECK: [[AND:%[0-9]+]]:sgpr(s64) = G_AND [[COPY]], [[COPY1]]
82     %0:_(s64) = COPY $sgpr0_sgpr1
83     %1:_(s64) = COPY $sgpr2_sgpr3
84     %2:_(s64) = G_AND %0, %1
85 ...
87 ---
88 name: and_s64_sv
89 legalized: true
91 body: |
92   bb.0:
93     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
94     ; CHECK-LABEL: name: and_s64_sv
95     ; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
96     ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
97     ; CHECK: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
98     ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
99     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
100     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
101     ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
102     %0:_(s64) = COPY $sgpr0_sgpr1
103     %1:_(s64) = COPY $vgpr0_vgpr1
104     %2:_(s64) = G_AND %0, %1
108 name: and_s64_vs
109 legalized: true
111 body: |
112   bb.0:
113     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
114     ; CHECK-LABEL: name: and_s64_vs
115     ; CHECK: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
116     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
117     ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
118     ; CHECK: [[UV2:%[0-9]+]]:sgpr(s32), [[UV3:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
119     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
120     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
121     ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
122     %0:_(s64) = COPY $vgpr0_vgpr1
123     %1:_(s64) = COPY $sgpr0_sgpr1
124     %2:_(s64) = G_AND %0, %1
128 name: and_s64_vv
129 legalized: true
131 body: |
132   bb.0:
133     liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
134     ; CHECK-LABEL: name: and_s64_vv
135     ; CHECK: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
136     ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
137     ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
138     ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
139     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
140     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
141     ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
142     %0:_(s64) = COPY $vgpr0_vgpr1
143     %1:_(s64) = COPY $vgpr2_vgpr3
144     %2:_(s64) = G_AND %0, %1
148 name: and_s64_vv_user
149 legalized: true
151 body: |
152   bb.0:
153     liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
154     ; CHECK-LABEL: name: and_s64_vv_user
155     ; CHECK: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
156     ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
157     ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
158     ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
159     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
160     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
161     ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
162     ; CHECK: S_NOP 0, implicit [[MV]](s64)
163     %0:_(s64) = COPY $vgpr0_vgpr1
164     %1:_(s64) = COPY $vgpr2_vgpr3
165     %2:_(s64) = G_AND %0, %1
166     S_NOP 0, implicit %2
169 name: and_s64_ss_ss_merge
170 legalized: true
172 body: |
173   bb.0:
174     liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3
175     ; CHECK-LABEL: name: and_s64_ss_ss_merge
176     ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
177     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
178     ; CHECK: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
179     ; CHECK: [[COPY3:%[0-9]+]]:sgpr(s32) = COPY $sgpr3
180     ; CHECK: [[MV:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
181     ; CHECK: [[MV1:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
182     ; CHECK: [[AND:%[0-9]+]]:sgpr(s64) = G_AND [[MV]], [[MV1]]
183     ; CHECK: S_NOP 0, implicit [[AND]](s64)
184     %0:_(s32) = COPY $sgpr0
185     %1:_(s32) = COPY $sgpr1
186     %2:_(s32) = COPY $sgpr2
187     %3:_(s32) = COPY $sgpr3
188     %4:_(s64) = G_MERGE_VALUES %0, %1
189     %5:_(s64) = G_MERGE_VALUES %2, %3
190     %6:_(s64) = G_AND %4, %5
191     S_NOP 0, implicit %6
195 name: and_s64_vv_vv_merge
196 legalized: true
198 body: |
199   bb.0:
200     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
201     ; CHECK-LABEL: name: and_s64_vv_vv_merge
202     ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
203     ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
204     ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
205     ; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr3
206     ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
207     ; CHECK: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
208     ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
209     ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)
210     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
211     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
212     ; CHECK: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
213     ; CHECK: S_NOP 0, implicit [[MV2]](s64)
214     %0:_(s32) = COPY $vgpr0
215     %1:_(s32) = COPY $vgpr1
216     %2:_(s32) = COPY $vgpr2
217     %3:_(s32) = COPY $vgpr3
218     %4:_(s64) = G_MERGE_VALUES %0, %1
219     %5:_(s64) = G_MERGE_VALUES %2, %3
220     %6:_(s64) = G_AND %4, %5
221     S_NOP 0, implicit %6
225 name: and_s64_s_sv_merge
226 legalized: true
228 body: |
229   bb.0:
230     liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0
231     ; CHECK-LABEL: name: and_s64_s_sv_merge
232     ; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
233     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
234     ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
235     ; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
236     ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY3]](s32), [[COPY2]](s32)
237     ; CHECK: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
238     ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
239     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
240     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
241     ; CHECK: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
242     ; CHECK: S_NOP 0, implicit [[MV1]](s64)
243     %0:_(s64) = COPY $sgpr0_sgpr1
244     %1:_(s32) = COPY $sgpr2
245     %2:_(s32) = COPY $vgpr0
246     %3:_(s64) = G_MERGE_VALUES %1, %2
247     %4:_(s64) = G_AND %0, %3
248     S_NOP 0, implicit %4
252 name: and_s64_s_vs_merge
253 legalized: true
255 body: |
256   bb.0:
257     liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0
258     ; CHECK-LABEL: name: and_s64_s_vs_merge
259     ; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
260     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
261     ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
262     ; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
263     ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
264     ; CHECK: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
265     ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
266     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
267     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
268     ; CHECK: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
269     ; CHECK: S_NOP 0, implicit [[MV1]](s64)
270     %0:_(s64) = COPY $sgpr0_sgpr1
271     %1:_(s32) = COPY $sgpr2
272     %2:_(s32) = COPY $vgpr0
273     %3:_(s64) = G_MERGE_VALUES %2, %1
274     %4:_(s64) = G_AND %0, %3
275     S_NOP 0, implicit %4
279 name: and_s64_sv_sv_merge
280 legalized: true
282 body: |
283   bb.0:
284     liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
285     ; CHECK-LABEL: name: and_s64_sv_sv_merge
286     ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
287     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
288     ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
289     ; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
290     ; CHECK: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
291     ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY2]](s32)
292     ; CHECK: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
293     ; CHECK: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY5]](s32), [[COPY3]](s32)
294     ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
295     ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)
296     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
297     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
298     ; CHECK: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
299     ; CHECK: S_NOP 0, implicit [[MV2]](s64)
300     %0:_(s32) = COPY $sgpr0
301     %1:_(s32) = COPY $sgpr1
302     %2:_(s32) = COPY $vgpr0
303     %3:_(s32) = COPY $vgpr1
304     %4:_(s64) = G_MERGE_VALUES %0, %2
305     %5:_(s64) = G_MERGE_VALUES %1, %3
306     %6:_(s64) = G_AND %4, %5
307     S_NOP 0, implicit %6
311 name: and_s64_sv_vs_merge
312 legalized: true
314 body: |
315   bb.0:
316     liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
317     ; CHECK-LABEL: name: and_s64_sv_vs_merge
318     ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
319     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
320     ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
321     ; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
322     ; CHECK: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
323     ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY2]](s32)
324     ; CHECK: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
325     ; CHECK: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY3]](s32), [[COPY5]](s32)
326     ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
327     ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)
328     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
329     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
330     ; CHECK: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
331     ; CHECK: S_NOP 0, implicit [[MV2]](s64)
332     %0:_(s32) = COPY $sgpr0
333     %1:_(s32) = COPY $sgpr1
334     %2:_(s32) = COPY $vgpr0
335     %3:_(s32) = COPY $vgpr1
336     %4:_(s64) = G_MERGE_VALUES %0, %2
337     %5:_(s64) = G_MERGE_VALUES %3, %1
338     %6:_(s64) = G_AND %4, %5
339     S_NOP 0, implicit %6
343 name: and_chain_s64_sv
344 legalized: true
346 body: |
347   bb.0:
348     liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1
349     ; CHECK-LABEL: name: and_chain_s64_sv
350     ; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
351     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
352     ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
353     ; CHECK: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
354     ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)
355     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
356     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
357     ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
358     ; CHECK: [[UV4:%[0-9]+]]:sgpr(s32), [[UV5:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
359     ; CHECK: [[UV6:%[0-9]+]]:vgpr(s32), [[UV7:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
360     ; CHECK: [[AND2:%[0-9]+]]:vgpr(s32) = G_AND [[UV4]], [[UV6]]
361     ; CHECK: [[AND3:%[0-9]+]]:vgpr(s32) = G_AND [[UV5]], [[UV7]]
362     ; CHECK: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND2]](s32), [[AND3]](s32)
363     ; CHECK: S_NOP 0, implicit [[MV1]](s64)
364     %0:_(s64) = COPY $sgpr0_sgpr1
365     %1:_(s64) = COPY $sgpr2_sgpr3
366     %2:_(s64) = COPY $vgpr0_vgpr1
367     %3:_(s64) = G_AND %0, %2
368     %4:_(s64) = G_AND %1, %3
369     S_NOP 0, implicit %4
373 name: and_v2i32_ss
374 legalized: true
376 body: |
377   bb.0:
378     liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
379     ; CHECK-LABEL: name: and_v2i32_ss
380     ; CHECK: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
381     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
382     ; CHECK: [[AND:%[0-9]+]]:sgpr(<2 x s32>) = G_AND [[COPY]], [[COPY1]]
383     ; CHECK: S_NOP 0, implicit [[AND]](<2 x s32>)
384     %0:_(<2 x s32>) = COPY $sgpr0_sgpr1
385     %1:_(<2 x s32>) = COPY $sgpr2_sgpr3
386     %2:_(<2 x s32>) = G_AND %0, %1
387     S_NOP 0, implicit %2
391 name: and_v2i32_sv
392 legalized: true
394 body: |
395   bb.0:
396     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
397     ; CHECK-LABEL: name: and_v2i32_sv
398     ; CHECK: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
399     ; CHECK: [[COPY1:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
400     ; CHECK: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
401     ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
402     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
403     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
404     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)
405     ; CHECK: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)
406     %0:_(<2 x s32>) = COPY $sgpr0_sgpr1
407     %1:_(<2 x s32>) = COPY $vgpr0_vgpr1
408     %2:_(<2 x s32>) = G_AND %0, %1
409     S_NOP 0, implicit %2
413 name: and_v2i32_vs
414 legalized: true
416 body: |
417   bb.0:
418     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
420     ; CHECK-LABEL: name: and_v2i32_vs
421     ; CHECK: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
422     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
423     ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
424     ; CHECK: [[UV2:%[0-9]+]]:sgpr(s32), [[UV3:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
425     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
426     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
427     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)
428     ; CHECK: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)
429     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
430     %1:_(<2 x s32>) = COPY $sgpr0_sgpr1
431     %2:_(<2 x s32>) = G_AND %0, %1
432     S_NOP 0, implicit %2
436 name: and_v2i32_vv
437 legalized: true
439 body: |
440   bb.0:
441     liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
442     ; CHECK-LABEL: name: and_v2i32_vv
443     ; CHECK: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
444     ; CHECK: [[COPY1:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
445     ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
446     ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
447     ; CHECK: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
448     ; CHECK: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
449     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)
450     ; CHECK: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)
451     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
452     %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
453     %2:_(<2 x s32>) = G_AND %0, %1
454     S_NOP 0, implicit %2
458 name: and_v4s16_ss
459 legalized: true
461 body: |
462   bb.0:
463     liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
464     ; CHECK-LABEL: name: and_v4s16_ss
465     ; CHECK: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
466     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
467     ; CHECK: [[AND:%[0-9]+]]:sgpr(<4 x s16>) = G_AND [[COPY]], [[COPY1]]
468     %0:_(<4 x s16>) = COPY $sgpr0_sgpr1
469     %1:_(<4 x s16>) = COPY $sgpr2_sgpr3
470     %2:_(<4 x s16>) = G_AND %0, %1
474 name: and_v4s16_sv
475 legalized: true
477 body: |
478   bb.0:
479     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
480     ; CHECK-LABEL: name: and_v4s16_sv
481     ; CHECK: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
482     ; CHECK: [[COPY1:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
483     ; CHECK: [[UV:%[0-9]+]]:sgpr(<2 x s16>), [[UV1:%[0-9]+]]:sgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
484     ; CHECK: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
485     ; CHECK: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV]], [[UV2]]
486     ; CHECK: [[AND1:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV1]], [[UV3]]
487     ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[AND]](<2 x s16>), [[AND1]](<2 x s16>)
488     %0:_(<4 x s16>) = COPY $sgpr0_sgpr1
489     %1:_(<4 x s16>) = COPY $vgpr0_vgpr1
490     %2:_(<4 x s16>) = G_AND %0, %1
494 name: and_v4s16_vs
495 legalized: true
497 body: |
498   bb.0:
499     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
500     ; CHECK-LABEL: name: and_v4s16_vs
501     ; CHECK: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
502     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
503     ; CHECK: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
504     ; CHECK: [[UV2:%[0-9]+]]:sgpr(<2 x s16>), [[UV3:%[0-9]+]]:sgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
505     ; CHECK: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV]], [[UV2]]
506     ; CHECK: [[AND1:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV1]], [[UV3]]
507     ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[AND]](<2 x s16>), [[AND1]](<2 x s16>)
508     %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
509     %1:_(<4 x s16>) = COPY $sgpr0_sgpr1
510     %2:_(<4 x s16>) = G_AND %0, %1
514 name: and_v4s16_vv
515 legalized: true
517 body: |
518   bb.0:
519     liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
520     ; CHECK-LABEL: name: and_v4s16_vv
521     ; CHECK: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
522     ; CHECK: [[COPY1:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
523     ; CHECK: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
524     ; CHECK: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
525     ; CHECK: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV]], [[UV2]]
526     ; CHECK: [[AND1:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV1]], [[UV3]]
527     ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[AND]](<2 x s16>), [[AND1]](<2 x s16>)
528     %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
529     %1:_(<4 x s16>) = COPY $vgpr2_vgpr3
530     %2:_(<4 x s16>) = G_AND %0, %1
534 name: and_v2s16_ss
535 legalized: true
537 body: |
538   bb.0:
539     liveins: $sgpr0, $sgpr1
540     ; CHECK-LABEL: name: and_v2s16_ss
541     ; CHECK: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
542     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1
543     ; CHECK: [[AND:%[0-9]+]]:sgpr(<2 x s16>) = G_AND [[COPY]], [[COPY1]]
544     %0:_(<2 x s16>) = COPY $sgpr0
545     %1:_(<2 x s16>) = COPY $sgpr1
546     %2:_(<2 x s16>) = G_AND %0, %1
550 name: and_v2s16_sv
551 legalized: true
553 body: |
554   bb.0:
555     liveins: $sgpr0, $vgpr0
556     ; CHECK-LABEL: name: and_v2s16_sv
557     ; CHECK: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
558     ; CHECK: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
559     ; CHECK: [[COPY2:%[0-9]+]]:vgpr(<2 x s16>) = COPY [[COPY]](<2 x s16>)
560     ; CHECK: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[COPY2]], [[COPY1]]
561     %0:_(<2 x s16>) = COPY $sgpr0
562     %1:_(<2 x s16>) = COPY $vgpr0
563     %2:_(<2 x s16>) = G_AND %0, %1
567 name: and_v2s16_vs
568 legalized: true
570 body: |
571   bb.0:
572     liveins: $sgpr0, $vgpr0
573     ; CHECK-LABEL: name: and_v2s16_vs
574     ; CHECK: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
575     ; CHECK: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
576     ; CHECK: [[COPY2:%[0-9]+]]:vgpr(<2 x s16>) = COPY [[COPY1]](<2 x s16>)
577     ; CHECK: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[COPY]], [[COPY2]]
578     %0:_(<2 x s16>) = COPY $vgpr0
579     %1:_(<2 x s16>) = COPY $sgpr0
580     %2:_(<2 x s16>) = G_AND %0, %1
584 name: and_v2s16_vv
585 legalized: true
587 body: |
588   bb.0:
589     liveins: $vgpr0, $vgpr1
590     ; CHECK-LABEL: name: and_v2s16_vv
591     ; CHECK: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
592     ; CHECK: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr1
593     ; CHECK: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[COPY]], [[COPY1]]
594     %0:_(<2 x s16>) = COPY $vgpr0
595     %1:_(<2 x s16>) = COPY $vgpr1
596     %2:_(<2 x s16>) = G_AND %0, %1