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
9 ; CHECK-LABEL: name: ctpop_s8_s8
10 ; CHECK: liveins: $vgpr0
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
30 ; CHECK-LABEL: name: ctpop_s9_s9
31 ; CHECK: liveins: $vgpr0
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
52 ; CHECK-LABEL: name: ctpop_s32_s32
53 ; CHECK: liveins: $vgpr0
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
69 ; CHECK-LABEL: name: ctpop_s32_s64
70 ; CHECK: liveins: $vgpr0_vgpr1
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
86 ; CHECK-LABEL: name: ctpop_s64_s64
87 ; CHECK: liveins: $vgpr0_vgpr1
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
104 ; CHECK-LABEL: name: ctpop_s16_s32
105 ; CHECK: liveins: $vgpr0
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
122 ; CHECK-LABEL: name: ctpop_s16_s16
123 ; CHECK: liveins: $vgpr0
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
139 name: ctpop_v2s32_v2s32
143 liveins: $vgpr0_vgpr1
144 ; CHECK-LABEL: name: ctpop_v2s32_v2s32
145 ; CHECK: liveins: $vgpr0_vgpr1
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
163 liveins: $vgpr0_vgpr1_vgpr2_vgpr3
164 ; CHECK-LABEL: name: ctpop_v2s32_v2s64
165 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
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
184 ; CHECK-LABEL: name: ctpop_v2s16_v2s16
185 ; CHECK: liveins: $vgpr0
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
213 ; CHECK-LABEL: name: ctpop_s7_s7
214 ; CHECK: liveins: $vgpr0
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
234 liveins: $vgpr0_vgpr1
236 ; CHECK-LABEL: name: ctpop_s33_s33
237 ; CHECK: liveins: $vgpr0_vgpr1
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
256 liveins: $vgpr0_vgpr1_vgpr2
257 ; CHECK-LABEL: name: ctpop_s65_s65
258 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2
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
284 liveins: $vgpr0_vgpr1_vgpr2
285 ; CHECK-LABEL: name: ctpop_s32_s65
286 ; CHECK: liveins: $vgpr0_vgpr1_vgpr2
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