[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / legalize-ctpop.mir
blobf183271cd5f2792dc8d2a82ff8086923dd5a983f
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -O0 -run-pass=legalizer %s -o - | FileCheck %s
4 ---
5 name: ctpop_s8_s8
6 body: |
7   bb.0:
8     liveins: $vgpr0
9     ; CHECK-LABEL: name: ctpop_s8_s8
10     ; CHECK: liveins: $vgpr0
11     ; CHECK-NEXT: {{  $}}
12     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
13     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
14     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
15     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s32)
16     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[CTPOP]](s32)
17     ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]](s32)
18     %0:_(s32) = COPY $vgpr0
19     %1:_(s8) = G_TRUNC %0
20     %2:_(s8) = G_CTPOP %1
21     %3:_(s32) = G_ZEXT %2
22     $vgpr0 = COPY %3
23 ...
25 ---
26 name: ctpop_s9_s9
27 body: |
28   bb.0:
29     liveins: $vgpr0
30     ; CHECK-LABEL: name: ctpop_s9_s9
31     ; CHECK: liveins: $vgpr0
32     ; CHECK-NEXT: {{  $}}
33     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
34     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 511
35     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
36     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s32)
37     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[CTPOP]](s32)
38     ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]](s32)
39     %0:_(s32) = COPY $vgpr0
40     %1:_(s9) = G_TRUNC %0
41     %2:_(s9) = G_CTPOP %1
42     %3:_(s32) = G_ZEXT %2
43     $vgpr0 = COPY %3
44 ...
46 ---
47 name: ctpop_s32_s32
49 body: |
50   bb.0:
51     liveins: $vgpr0
52     ; CHECK-LABEL: name: ctpop_s32_s32
53     ; CHECK: liveins: $vgpr0
54     ; CHECK-NEXT: {{  $}}
55     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
56     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[COPY]](s32)
57     ; CHECK-NEXT: $vgpr0 = COPY [[CTPOP]](s32)
58     %0:_(s32) = COPY $vgpr0
59     %1:_(s32) = G_CTPOP %0
60     $vgpr0 = COPY %1
61 ...
63 ---
64 name: ctpop_s32_s64
66 body: |
67   bb.0:
68     liveins: $vgpr0_vgpr1
69     ; CHECK-LABEL: name: ctpop_s32_s64
70     ; CHECK: liveins: $vgpr0_vgpr1
71     ; CHECK-NEXT: {{  $}}
72     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
73     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[COPY]](s64)
74     ; CHECK-NEXT: $vgpr0 = COPY [[CTPOP]](s32)
75     %0:_(s64) = COPY $vgpr0_vgpr1
76     %1:_(s32) = G_CTPOP %0
77     $vgpr0 = COPY %1
78 ...
80 ---
81 name: ctpop_s64_s64
83 body: |
84   bb.0:
85     liveins: $vgpr0_vgpr1
86     ; CHECK-LABEL: name: ctpop_s64_s64
87     ; CHECK: liveins: $vgpr0_vgpr1
88     ; CHECK-NEXT: {{  $}}
89     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
90     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[COPY]](s64)
91     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[CTPOP]](s32)
92     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64)
93     %0:_(s64) = COPY $vgpr0_vgpr1
94     %1:_(s64) = G_CTPOP %0
95     $vgpr0_vgpr1 = COPY %1
96 ...
98 ---
99 name: ctpop_s16_s32
101 body: |
102   bb.0:
103     liveins: $vgpr0
104     ; CHECK-LABEL: name: ctpop_s16_s32
105     ; CHECK: liveins: $vgpr0
106     ; CHECK-NEXT: {{  $}}
107     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
108     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[COPY]](s32)
109     ; CHECK-NEXT: $vgpr0 = COPY [[CTPOP]](s32)
110     %0:_(s32) = COPY $vgpr0
111     %1:_(s16) = G_CTPOP %0
112     %2:_(s32) = G_ZEXT %1
113     $vgpr0 = COPY %2
117 name: ctpop_s16_s16
119 body: |
120   bb.0:
121     liveins: $vgpr0
122     ; CHECK-LABEL: name: ctpop_s16_s16
123     ; CHECK: liveins: $vgpr0
124     ; CHECK-NEXT: {{  $}}
125     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
126     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
127     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
128     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s32)
129     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[CTPOP]](s32)
130     ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]](s32)
131     %0:_(s32) = COPY $vgpr0
132     %1:_(s16) = G_TRUNC %0
133     %2:_(s16) = G_CTPOP %1
134     %3:_(s32) = G_ZEXT %2
135     $vgpr0 = COPY %3
139 name: ctpop_v2s32_v2s32
141 body: |
142   bb.0:
143     liveins: $vgpr0_vgpr1
144     ; CHECK-LABEL: name: ctpop_v2s32_v2s32
145     ; CHECK: liveins: $vgpr0_vgpr1
146     ; CHECK-NEXT: {{  $}}
147     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
148     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
149     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[UV]](s32)
150     ; CHECK-NEXT: [[CTPOP1:%[0-9]+]]:_(s32) = G_CTPOP [[UV1]](s32)
151     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[CTPOP]](s32), [[CTPOP1]](s32)
152     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
153     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
154     %1:_(<2 x s32>) = G_CTPOP %0
155     $vgpr0_vgpr1 = COPY %1
159 name: ctpop_v2s32_v2s64
161 body: |
162   bb.0:
163     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
164     ; CHECK-LABEL: name: ctpop_v2s32_v2s64
165     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
166     ; CHECK-NEXT: {{  $}}
167     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
168     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
169     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[UV]](s64)
170     ; CHECK-NEXT: [[CTPOP1:%[0-9]+]]:_(s32) = G_CTPOP [[UV1]](s64)
171     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[CTPOP]](s32), [[CTPOP1]](s32)
172     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
173     %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
174     %1:_(<2 x s32>) = G_CTPOP %0
175     $vgpr0_vgpr1 = COPY %1
179 name: ctpop_v2s16_v2s16
181 body: |
182   bb.0:
183     liveins: $vgpr0
184     ; CHECK-LABEL: name: ctpop_v2s16_v2s16
185     ; CHECK: liveins: $vgpr0
186     ; CHECK-NEXT: {{  $}}
187     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
188     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
189     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
190     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
191     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
192     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C1]]
193     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s32)
194     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[CTPOP]](s32)
195     ; CHECK-NEXT: [[CTPOP1:%[0-9]+]]:_(s32) = G_CTPOP [[LSHR]](s32)
196     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[CTPOP1]](s32)
197     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY2]], [[C]](s32)
198     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[SHL]]
199     ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
200     ; CHECK-NEXT: $vgpr0 = COPY [[BITCAST1]](<2 x s16>)
201     %0:_(<2 x s16>) = COPY $vgpr0
202     %1:_(<2 x s16>) = G_CTPOP %0
203     $vgpr0 = COPY %1
207 name: ctpop_s7_s7
209 body: |
210   bb.0:
211     liveins: $vgpr0
213     ; CHECK-LABEL: name: ctpop_s7_s7
214     ; CHECK: liveins: $vgpr0
215     ; CHECK-NEXT: {{  $}}
216     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
217     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 127
218     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
219     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s32)
220     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[CTPOP]](s32)
221     ; CHECK-NEXT: $vgpr0 = COPY [[COPY1]](s32)
222     %0:_(s32) = COPY $vgpr0
223     %1:_(s7) = G_TRUNC %0
224     %2:_(s7) = G_CTPOP %1
225     %3:_(s32) = G_ZEXT %2
226     $vgpr0 = COPY %3
230 name: ctpop_s33_s33
232 body: |
233   bb.0:
234     liveins: $vgpr0_vgpr1
236     ; CHECK-LABEL: name: ctpop_s33_s33
237     ; CHECK: liveins: $vgpr0_vgpr1
238     ; CHECK-NEXT: {{  $}}
239     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
240     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8589934591
241     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]
242     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s64)
243     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[CTPOP]](s32)
244     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64)
245     %0:_(s64) = COPY $vgpr0_vgpr1
246     %1:_(s33) = G_TRUNC %0
247     %2:_(s33) = G_CTPOP %1
248     %3:_(s64) = G_ANYEXT %2
249     $vgpr0_vgpr1 = COPY %3
253 name: ctpop_s65_s65
254 body: |
255   bb.0:
256     liveins: $vgpr0_vgpr1_vgpr2
257     ; CHECK-LABEL: name: ctpop_s65_s65
258     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2
259     ; CHECK-NEXT: {{  $}}
260     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2
261     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s96)
262     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
263     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV]](s32), [[UV1]](s32)
264     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV2]](s32), [[DEF]](s32)
265     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
266     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
267     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[MV]], [[C]]
268     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[MV1]], [[C1]]
269     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s64)
270     ; CHECK-NEXT: [[CTPOP1:%[0-9]+]]:_(s32) = G_CTPOP [[AND1]](s64)
271     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[CTPOP1]], [[CTPOP]]
272     ; CHECK-NEXT: $vgpr0 = COPY [[ADD]](s32)
273     %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2
274     %1:_(s65) = G_TRUNC %0
275     %2:_(s65) = G_CTPOP %1
276     %3:_(s32) = G_TRUNC %2
277     $vgpr0 = COPY %3
281 name: ctpop_s32_s65
282 body: |
283   bb.0:
284     liveins: $vgpr0_vgpr1_vgpr2
285     ; CHECK-LABEL: name: ctpop_s32_s65
286     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2
287     ; CHECK-NEXT: {{  $}}
288     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2
289     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s96)
290     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
291     ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV]](s32), [[UV1]](s32)
292     ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UV2]](s32), [[DEF]](s32)
293     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
294     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
295     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[MV]], [[C]]
296     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[MV1]], [[C1]]
297     ; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(s32) = G_CTPOP [[AND]](s64)
298     ; CHECK-NEXT: [[CTPOP1:%[0-9]+]]:_(s32) = G_CTPOP [[AND1]](s64)
299     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[CTPOP1]], [[CTPOP]]
300     ; CHECK-NEXT: $vgpr0 = COPY [[ADD]](s32)
301     %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2
302     %1:_(s65) = G_TRUNC %0
303     %2:_(s32) = G_CTPOP %1
304     $vgpr0 = COPY %2