[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / regbankselect-and.mir
blob3322f8fe9cb113866b674f2f5a5e2570d6ab3e6b
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=fiji -run-pass=amdgpu-regbankselect %s -verify-machineinstrs -o - -regbankselect-fast | FileCheck %s
3 # RUN: llc -march=amdgcn -mcpu=fiji -run-pass=amdgpu-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: liveins: $sgpr0, $sgpr1
14     ; CHECK-NEXT: {{  $}}
15     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
16     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
17     ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s32) = G_AND [[COPY]], [[COPY1]]
18     %0:_(s32) = COPY $sgpr0
19     %1:_(s32) = COPY $sgpr1
20     %2:_(s32) = G_AND %0, %1
21 ...
23 ---
24 name: and_s32_sv
25 legalized: true
27 body: |
28   bb.0:
29     liveins: $sgpr0, $vgpr0
30     ; CHECK-LABEL: name: and_s32_sv
31     ; CHECK: liveins: $sgpr0, $vgpr0
32     ; CHECK-NEXT: {{  $}}
33     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
34     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
35     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
36     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY2]], [[COPY1]]
37     %0:_(s32) = COPY $sgpr0
38     %1:_(s32) = COPY $vgpr0
39     %2:_(s32) = G_AND %0, %1
40 ...
42 ---
43 name: and_s32_vs
44 legalized: true
46 body: |
47   bb.0:
48     liveins: $sgpr0, $vgpr0
49     ; CHECK-LABEL: name: and_s32_vs
50     ; CHECK: liveins: $sgpr0, $vgpr0
51     ; CHECK-NEXT: {{  $}}
52     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
53     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
54     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
55     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[COPY2]]
56     %0:_(s32) = COPY $vgpr0
57     %1:_(s32) = COPY $sgpr0
58     %2:_(s32) = G_AND %0, %1
59 ...
61 ---
62 name: and_s32_vv
63 legalized: true
65 body: |
66   bb.0:
67     liveins: $vgpr0, $vgpr1
68     ; CHECK-LABEL: name: and_s32_vv
69     ; CHECK: liveins: $vgpr0, $vgpr1
70     ; CHECK-NEXT: {{  $}}
71     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
72     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
73     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[COPY]], [[COPY1]]
74     %0:_(s32) = COPY $vgpr0
75     %1:_(s32) = COPY $vgpr1
76     %2:_(s32) = G_AND %0, %1
77 ...
79 ---
80 name: and_s64_ss
81 legalized: true
83 body: |
84   bb.0:
85     liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
86     ; CHECK-LABEL: name: and_s64_ss
87     ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
88     ; CHECK-NEXT: {{  $}}
89     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
90     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
91     ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s64) = G_AND [[COPY]], [[COPY1]]
92     %0:_(s64) = COPY $sgpr0_sgpr1
93     %1:_(s64) = COPY $sgpr2_sgpr3
94     %2:_(s64) = G_AND %0, %1
95 ...
97 ---
98 name: and_s64_sv
99 legalized: true
101 body: |
102   bb.0:
103     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
104     ; CHECK-LABEL: name: and_s64_sv
105     ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
106     ; CHECK-NEXT: {{  $}}
107     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
108     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
109     ; CHECK-NEXT: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
110     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
111     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
112     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
113     ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
114     %0:_(s64) = COPY $sgpr0_sgpr1
115     %1:_(s64) = COPY $vgpr0_vgpr1
116     %2:_(s64) = G_AND %0, %1
120 name: and_s64_vs
121 legalized: true
123 body: |
124   bb.0:
125     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
126     ; CHECK-LABEL: name: and_s64_vs
127     ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
128     ; CHECK-NEXT: {{  $}}
129     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
130     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
131     ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
132     ; CHECK-NEXT: [[UV2:%[0-9]+]]:sgpr(s32), [[UV3:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
133     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
134     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
135     ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
136     %0:_(s64) = COPY $vgpr0_vgpr1
137     %1:_(s64) = COPY $sgpr0_sgpr1
138     %2:_(s64) = G_AND %0, %1
142 name: and_s64_vv
143 legalized: true
145 body: |
146   bb.0:
147     liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
148     ; CHECK-LABEL: name: and_s64_vv
149     ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
150     ; CHECK-NEXT: {{  $}}
151     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
152     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
153     ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
154     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
155     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
156     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
157     ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
158     %0:_(s64) = COPY $vgpr0_vgpr1
159     %1:_(s64) = COPY $vgpr2_vgpr3
160     %2:_(s64) = G_AND %0, %1
164 name: and_s64_vv_user
165 legalized: true
167 body: |
168   bb.0:
169     liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
170     ; CHECK-LABEL: name: and_s64_vv_user
171     ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
172     ; CHECK-NEXT: {{  $}}
173     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
174     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
175     ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
176     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
177     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
178     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
179     ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
180     ; CHECK-NEXT: S_NOP 0, implicit [[MV]](s64)
181     %0:_(s64) = COPY $vgpr0_vgpr1
182     %1:_(s64) = COPY $vgpr2_vgpr3
183     %2:_(s64) = G_AND %0, %1
184     S_NOP 0, implicit %2
187 name: and_s64_ss_ss_merge
188 legalized: true
190 body: |
191   bb.0:
192     liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3
193     ; CHECK-LABEL: name: and_s64_ss_ss_merge
194     ; CHECK: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3
195     ; CHECK-NEXT: {{  $}}
196     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
197     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
198     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
199     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sgpr(s32) = COPY $sgpr3
200     ; CHECK-NEXT: [[MV:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
201     ; CHECK-NEXT: [[MV1:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
202     ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(s64) = G_AND [[MV]], [[MV1]]
203     ; CHECK-NEXT: S_NOP 0, implicit [[AND]](s64)
204     %0:_(s32) = COPY $sgpr0
205     %1:_(s32) = COPY $sgpr1
206     %2:_(s32) = COPY $sgpr2
207     %3:_(s32) = COPY $sgpr3
208     %4:_(s64) = G_MERGE_VALUES %0, %1
209     %5:_(s64) = G_MERGE_VALUES %2, %3
210     %6:_(s64) = G_AND %4, %5
211     S_NOP 0, implicit %6
215 name: and_s64_vv_vv_merge
216 legalized: true
218 body: |
219   bb.0:
220     liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
221     ; CHECK-LABEL: name: and_s64_vv_vv_merge
222     ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
223     ; CHECK-NEXT: {{  $}}
224     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
225     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
226     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
227     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr3
228     ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
229     ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
230     ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
231     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)
232     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
233     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
234     ; CHECK-NEXT: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
235     ; CHECK-NEXT: S_NOP 0, implicit [[MV2]](s64)
236     %0:_(s32) = COPY $vgpr0
237     %1:_(s32) = COPY $vgpr1
238     %2:_(s32) = COPY $vgpr2
239     %3:_(s32) = COPY $vgpr3
240     %4:_(s64) = G_MERGE_VALUES %0, %1
241     %5:_(s64) = G_MERGE_VALUES %2, %3
242     %6:_(s64) = G_AND %4, %5
243     S_NOP 0, implicit %6
247 name: and_s64_s_sv_merge
248 legalized: true
250 body: |
251   bb.0:
252     liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0
253     ; CHECK-LABEL: name: and_s64_s_sv_merge
254     ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0
255     ; CHECK-NEXT: {{  $}}
256     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
257     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
258     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
259     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
260     ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY3]](s32), [[COPY2]](s32)
261     ; CHECK-NEXT: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
262     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
263     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
264     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
265     ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
266     ; CHECK-NEXT: S_NOP 0, implicit [[MV1]](s64)
267     %0:_(s64) = COPY $sgpr0_sgpr1
268     %1:_(s32) = COPY $sgpr2
269     %2:_(s32) = COPY $vgpr0
270     %3:_(s64) = G_MERGE_VALUES %1, %2
271     %4:_(s64) = G_AND %0, %3
272     S_NOP 0, implicit %4
276 name: and_s64_s_vs_merge
277 legalized: true
279 body: |
280   bb.0:
281     liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0
282     ; CHECK-LABEL: name: and_s64_s_vs_merge
283     ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0
284     ; CHECK-NEXT: {{  $}}
285     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
286     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
287     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
288     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
289     ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
290     ; CHECK-NEXT: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
291     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
292     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
293     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
294     ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
295     ; CHECK-NEXT: S_NOP 0, implicit [[MV1]](s64)
296     %0:_(s64) = COPY $sgpr0_sgpr1
297     %1:_(s32) = COPY $sgpr2
298     %2:_(s32) = COPY $vgpr0
299     %3:_(s64) = G_MERGE_VALUES %2, %1
300     %4:_(s64) = G_AND %0, %3
301     S_NOP 0, implicit %4
305 name: and_s64_sv_sv_merge
306 legalized: true
308 body: |
309   bb.0:
310     liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
311     ; CHECK-LABEL: name: and_s64_sv_sv_merge
312     ; CHECK: liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
313     ; CHECK-NEXT: {{  $}}
314     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
315     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
316     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
317     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
318     ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
319     ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY2]](s32)
320     ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
321     ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY5]](s32), [[COPY3]](s32)
322     ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
323     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)
324     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
325     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
326     ; CHECK-NEXT: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
327     ; CHECK-NEXT: S_NOP 0, implicit [[MV2]](s64)
328     %0:_(s32) = COPY $sgpr0
329     %1:_(s32) = COPY $sgpr1
330     %2:_(s32) = COPY $vgpr0
331     %3:_(s32) = COPY $vgpr1
332     %4:_(s64) = G_MERGE_VALUES %0, %2
333     %5:_(s64) = G_MERGE_VALUES %1, %3
334     %6:_(s64) = G_AND %4, %5
335     S_NOP 0, implicit %6
339 name: and_s64_sv_vs_merge
340 legalized: true
342 body: |
343   bb.0:
344     liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
345     ; CHECK-LABEL: name: and_s64_sv_vs_merge
346     ; CHECK: liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
347     ; CHECK-NEXT: {{  $}}
348     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
349     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
350     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
351     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
352     ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
353     ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY2]](s32)
354     ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
355     ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY3]](s32), [[COPY5]](s32)
356     ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
357     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)
358     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
359     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
360     ; CHECK-NEXT: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
361     ; CHECK-NEXT: S_NOP 0, implicit [[MV2]](s64)
362     %0:_(s32) = COPY $sgpr0
363     %1:_(s32) = COPY $sgpr1
364     %2:_(s32) = COPY $vgpr0
365     %3:_(s32) = COPY $vgpr1
366     %4:_(s64) = G_MERGE_VALUES %0, %2
367     %5:_(s64) = G_MERGE_VALUES %3, %1
368     %6:_(s64) = G_AND %4, %5
369     S_NOP 0, implicit %6
373 name: and_chain_s64_sv
374 legalized: true
376 body: |
377   bb.0:
378     liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1
379     ; CHECK-LABEL: name: and_chain_s64_sv
380     ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1
381     ; CHECK-NEXT: {{  $}}
382     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
383     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
384     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
385     ; CHECK-NEXT: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
386     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)
387     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
388     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
389     ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
390     ; CHECK-NEXT: [[UV4:%[0-9]+]]:sgpr(s32), [[UV5:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
391     ; CHECK-NEXT: [[UV6:%[0-9]+]]:vgpr(s32), [[UV7:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
392     ; CHECK-NEXT: [[AND2:%[0-9]+]]:vgpr(s32) = G_AND [[UV4]], [[UV6]]
393     ; CHECK-NEXT: [[AND3:%[0-9]+]]:vgpr(s32) = G_AND [[UV5]], [[UV7]]
394     ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[AND2]](s32), [[AND3]](s32)
395     ; CHECK-NEXT: S_NOP 0, implicit [[MV1]](s64)
396     %0:_(s64) = COPY $sgpr0_sgpr1
397     %1:_(s64) = COPY $sgpr2_sgpr3
398     %2:_(s64) = COPY $vgpr0_vgpr1
399     %3:_(s64) = G_AND %0, %2
400     %4:_(s64) = G_AND %1, %3
401     S_NOP 0, implicit %4
405 name: and_v2i32_ss
406 legalized: true
408 body: |
409   bb.0:
410     liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
411     ; CHECK-LABEL: name: and_v2i32_ss
412     ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
413     ; CHECK-NEXT: {{  $}}
414     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
415     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
416     ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(<2 x s32>) = G_AND [[COPY]], [[COPY1]]
417     ; CHECK-NEXT: S_NOP 0, implicit [[AND]](<2 x s32>)
418     %0:_(<2 x s32>) = COPY $sgpr0_sgpr1
419     %1:_(<2 x s32>) = COPY $sgpr2_sgpr3
420     %2:_(<2 x s32>) = G_AND %0, %1
421     S_NOP 0, implicit %2
425 name: and_v2i32_sv
426 legalized: true
428 body: |
429   bb.0:
430     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
431     ; CHECK-LABEL: name: and_v2i32_sv
432     ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
433     ; CHECK-NEXT: {{  $}}
434     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
435     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
436     ; CHECK-NEXT: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
437     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
438     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
439     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
440     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)
441     ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)
442     %0:_(<2 x s32>) = COPY $sgpr0_sgpr1
443     %1:_(<2 x s32>) = COPY $vgpr0_vgpr1
444     %2:_(<2 x s32>) = G_AND %0, %1
445     S_NOP 0, implicit %2
449 name: and_v2i32_vs
450 legalized: true
452 body: |
453   bb.0:
454     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
456     ; CHECK-LABEL: name: and_v2i32_vs
457     ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
458     ; CHECK-NEXT: {{  $}}
459     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
460     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
461     ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
462     ; CHECK-NEXT: [[UV2:%[0-9]+]]:sgpr(s32), [[UV3:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
463     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
464     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
465     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)
466     ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)
467     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
468     %1:_(<2 x s32>) = COPY $sgpr0_sgpr1
469     %2:_(<2 x s32>) = G_AND %0, %1
470     S_NOP 0, implicit %2
474 name: and_v2i32_vv
475 legalized: true
477 body: |
478   bb.0:
479     liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
480     ; CHECK-LABEL: name: and_v2i32_vv
481     ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
482     ; CHECK-NEXT: {{  $}}
483     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
484     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
485     ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
486     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
487     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(s32) = G_AND [[UV]], [[UV2]]
488     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(s32) = G_AND [[UV1]], [[UV3]]
489     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[AND1]](s32)
490     ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)
491     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
492     %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
493     %2:_(<2 x s32>) = G_AND %0, %1
494     S_NOP 0, implicit %2
498 name: and_v4s16_ss
499 legalized: true
501 body: |
502   bb.0:
503     liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
504     ; CHECK-LABEL: name: and_v4s16_ss
505     ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
506     ; CHECK-NEXT: {{  $}}
507     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
508     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
509     ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(<4 x s16>) = G_AND [[COPY]], [[COPY1]]
510     %0:_(<4 x s16>) = COPY $sgpr0_sgpr1
511     %1:_(<4 x s16>) = COPY $sgpr2_sgpr3
512     %2:_(<4 x s16>) = G_AND %0, %1
516 name: and_v4s16_sv
517 legalized: true
519 body: |
520   bb.0:
521     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
522     ; CHECK-LABEL: name: and_v4s16_sv
523     ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
524     ; CHECK-NEXT: {{  $}}
525     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
526     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
527     ; CHECK-NEXT: [[UV:%[0-9]+]]:sgpr(<2 x s16>), [[UV1:%[0-9]+]]:sgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
528     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
529     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV]], [[UV2]]
530     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV1]], [[UV3]]
531     ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[AND]](<2 x s16>), [[AND1]](<2 x s16>)
532     %0:_(<4 x s16>) = COPY $sgpr0_sgpr1
533     %1:_(<4 x s16>) = COPY $vgpr0_vgpr1
534     %2:_(<4 x s16>) = G_AND %0, %1
538 name: and_v4s16_vs
539 legalized: true
541 body: |
542   bb.0:
543     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
544     ; CHECK-LABEL: name: and_v4s16_vs
545     ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
546     ; CHECK-NEXT: {{  $}}
547     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
548     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
549     ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
550     ; CHECK-NEXT: [[UV2:%[0-9]+]]:sgpr(<2 x s16>), [[UV3:%[0-9]+]]:sgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
551     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV]], [[UV2]]
552     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV1]], [[UV3]]
553     ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[AND]](<2 x s16>), [[AND1]](<2 x s16>)
554     %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
555     %1:_(<4 x s16>) = COPY $sgpr0_sgpr1
556     %2:_(<4 x s16>) = G_AND %0, %1
560 name: and_v4s16_vv
561 legalized: true
563 body: |
564   bb.0:
565     liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
566     ; CHECK-LABEL: name: and_v4s16_vv
567     ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
568     ; CHECK-NEXT: {{  $}}
569     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
570     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
571     ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
572     ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
573     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV]], [[UV2]]
574     ; CHECK-NEXT: [[AND1:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[UV1]], [[UV3]]
575     ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[AND]](<2 x s16>), [[AND1]](<2 x s16>)
576     %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
577     %1:_(<4 x s16>) = COPY $vgpr2_vgpr3
578     %2:_(<4 x s16>) = G_AND %0, %1
582 name: and_v2s16_ss
583 legalized: true
585 body: |
586   bb.0:
587     liveins: $sgpr0, $sgpr1
588     ; CHECK-LABEL: name: and_v2s16_ss
589     ; CHECK: liveins: $sgpr0, $sgpr1
590     ; CHECK-NEXT: {{  $}}
591     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
592     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1
593     ; CHECK-NEXT: [[AND:%[0-9]+]]:sgpr(<2 x s16>) = G_AND [[COPY]], [[COPY1]]
594     %0:_(<2 x s16>) = COPY $sgpr0
595     %1:_(<2 x s16>) = COPY $sgpr1
596     %2:_(<2 x s16>) = G_AND %0, %1
600 name: and_v2s16_sv
601 legalized: true
603 body: |
604   bb.0:
605     liveins: $sgpr0, $vgpr0
606     ; CHECK-LABEL: name: and_v2s16_sv
607     ; CHECK: liveins: $sgpr0, $vgpr0
608     ; CHECK-NEXT: {{  $}}
609     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
610     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
611     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<2 x s16>) = COPY [[COPY]](<2 x s16>)
612     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[COPY2]], [[COPY1]]
613     %0:_(<2 x s16>) = COPY $sgpr0
614     %1:_(<2 x s16>) = COPY $vgpr0
615     %2:_(<2 x s16>) = G_AND %0, %1
619 name: and_v2s16_vs
620 legalized: true
622 body: |
623   bb.0:
624     liveins: $sgpr0, $vgpr0
625     ; CHECK-LABEL: name: and_v2s16_vs
626     ; CHECK: liveins: $sgpr0, $vgpr0
627     ; CHECK-NEXT: {{  $}}
628     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
629     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
630     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<2 x s16>) = COPY [[COPY1]](<2 x s16>)
631     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[COPY]], [[COPY2]]
632     %0:_(<2 x s16>) = COPY $vgpr0
633     %1:_(<2 x s16>) = COPY $sgpr0
634     %2:_(<2 x s16>) = G_AND %0, %1
638 name: and_v2s16_vv
639 legalized: true
641 body: |
642   bb.0:
643     liveins: $vgpr0, $vgpr1
644     ; CHECK-LABEL: name: and_v2s16_vv
645     ; CHECK: liveins: $vgpr0, $vgpr1
646     ; CHECK-NEXT: {{  $}}
647     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
648     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr1
649     ; CHECK-NEXT: [[AND:%[0-9]+]]:vgpr(<2 x s16>) = G_AND [[COPY]], [[COPY1]]
650     %0:_(<2 x s16>) = COPY $vgpr0
651     %1:_(<2 x s16>) = COPY $vgpr1
652     %2:_(<2 x s16>) = G_AND %0, %1