[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / legalize-cttz.mir
blob39d51cdd6a743132b6554d73f28fdfb232d43c87
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: cttz_s32_s32
7 body: |
8   bb.0:
9     liveins: $vgpr0
10     ; CHECK-LABEL: name: cttz_s32_s32
11     ; CHECK: liveins: $vgpr0
12     ; CHECK-NEXT: {{  $}}
13     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
14     ; CHECK-NEXT: [[AMDGPU_FFBL_B32_:%[0-9]+]]:_(s32) = G_AMDGPU_FFBL_B32 [[COPY]](s32)
15     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
16     ; CHECK-NEXT: [[UMIN:%[0-9]+]]:_(s32) = G_UMIN [[AMDGPU_FFBL_B32_]], [[C]]
17     ; CHECK-NEXT: $vgpr0 = COPY [[UMIN]](s32)
18     %0:_(s32) = COPY $vgpr0
19     %1:_(s32) = G_CTTZ %0
20     $vgpr0 = COPY %1
21 ...
23 ---
24 name: cttz_s32_s64
26 body: |
27   bb.0:
28     liveins: $vgpr0_vgpr1
29     ; CHECK-LABEL: name: cttz_s32_s64
30     ; CHECK: liveins: $vgpr0_vgpr1
31     ; CHECK-NEXT: {{  $}}
32     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
33     ; CHECK-NEXT: [[AMDGPU_FFBL_B32_:%[0-9]+]]:_(s32) = G_AMDGPU_FFBL_B32 [[COPY]](s64)
34     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 64
35     ; CHECK-NEXT: [[UMIN:%[0-9]+]]:_(s32) = G_UMIN [[AMDGPU_FFBL_B32_]], [[C]]
36     ; CHECK-NEXT: $vgpr0 = COPY [[UMIN]](s32)
37     %0:_(s64) = COPY $vgpr0_vgpr1
38     %1:_(s32) = G_CTTZ %0
39     $vgpr0 = COPY %1
40 ...
42 ---
43 name: cttz_s64_s64
45 body: |
46   bb.0:
47     liveins: $vgpr0_vgpr1
48     ; CHECK-LABEL: name: cttz_s64_s64
49     ; CHECK: liveins: $vgpr0_vgpr1
50     ; CHECK-NEXT: {{  $}}
51     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
52     ; CHECK-NEXT: [[AMDGPU_FFBL_B32_:%[0-9]+]]:_(s32) = G_AMDGPU_FFBL_B32 [[COPY]](s64)
53     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 64
54     ; CHECK-NEXT: [[UMIN:%[0-9]+]]:_(s32) = G_UMIN [[AMDGPU_FFBL_B32_]], [[C]]
55     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UMIN]](s32)
56     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64)
57     %0:_(s64) = COPY $vgpr0_vgpr1
58     %1:_(s64) = G_CTTZ %0
59     $vgpr0_vgpr1 = COPY %1
60 ...
62 ---
63 name: cttz_s16_s32
65 body: |
66   bb.0:
67     liveins: $vgpr0
68     ; CHECK-LABEL: name: cttz_s16_s32
69     ; CHECK: liveins: $vgpr0
70     ; CHECK-NEXT: {{  $}}
71     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
72     ; CHECK-NEXT: [[AMDGPU_FFBL_B32_:%[0-9]+]]:_(s32) = G_AMDGPU_FFBL_B32 [[COPY]](s32)
73     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
74     ; CHECK-NEXT: [[UMIN:%[0-9]+]]:_(s32) = G_UMIN [[AMDGPU_FFBL_B32_]], [[C]]
75     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
76     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UMIN]], [[C1]]
77     ; CHECK-NEXT: $vgpr0 = COPY [[AND]](s32)
78     %0:_(s32) = COPY $vgpr0
79     %1:_(s16) = G_CTTZ %0
80     %2:_(s32) = G_ZEXT %1
81     $vgpr0 = COPY %2
82 ...
84 ---
85 name: cttz_s16_s16
87 body: |
88   bb.0:
89     liveins: $vgpr0
90     ; CHECK-LABEL: name: cttz_s16_s16
91     ; CHECK: liveins: $vgpr0
92     ; CHECK-NEXT: {{  $}}
93     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
94     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536
95     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY]], [[C]]
96     ; CHECK-NEXT: [[CTTZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTTZ_ZERO_UNDEF [[OR]](s32)
97     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[CTTZ_ZERO_UNDEF]](s32)
98     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
99     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
100     ; CHECK-NEXT: $vgpr0 = COPY [[AND]](s32)
101     %0:_(s32) = COPY $vgpr0
102     %1:_(s16) = G_TRUNC %0
103     %2:_(s16) = G_CTTZ %1
104     %3:_(s32) = G_ZEXT %2
105     $vgpr0 = COPY %3
109 name: cttz_v2s32_v2s32
111 body: |
112   bb.0:
113     liveins: $vgpr0_vgpr1
114     ; CHECK-LABEL: name: cttz_v2s32_v2s32
115     ; CHECK: liveins: $vgpr0_vgpr1
116     ; CHECK-NEXT: {{  $}}
117     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
118     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
119     ; CHECK-NEXT: [[AMDGPU_FFBL_B32_:%[0-9]+]]:_(s32) = G_AMDGPU_FFBL_B32 [[UV]](s32)
120     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 32
121     ; CHECK-NEXT: [[UMIN:%[0-9]+]]:_(s32) = G_UMIN [[AMDGPU_FFBL_B32_]], [[C]]
122     ; CHECK-NEXT: [[AMDGPU_FFBL_B32_1:%[0-9]+]]:_(s32) = G_AMDGPU_FFBL_B32 [[UV1]](s32)
123     ; CHECK-NEXT: [[UMIN1:%[0-9]+]]:_(s32) = G_UMIN [[AMDGPU_FFBL_B32_1]], [[C]]
124     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[UMIN]](s32), [[UMIN1]](s32)
125     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
126     %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
127     %1:_(<2 x s32>) = G_CTTZ %0
128     $vgpr0_vgpr1 = COPY %1
132 name: cttz_v2s32_v2s64
134 body: |
135   bb.0:
136     liveins: $vgpr0_vgpr1_vgpr2_vgpr3
137     ; CHECK-LABEL: name: cttz_v2s32_v2s64
138     ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3
139     ; CHECK-NEXT: {{  $}}
140     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
141     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
142     ; CHECK-NEXT: [[AMDGPU_FFBL_B32_:%[0-9]+]]:_(s32) = G_AMDGPU_FFBL_B32 [[UV]](s64)
143     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 64
144     ; CHECK-NEXT: [[UMIN:%[0-9]+]]:_(s32) = G_UMIN [[AMDGPU_FFBL_B32_]], [[C]]
145     ; CHECK-NEXT: [[AMDGPU_FFBL_B32_1:%[0-9]+]]:_(s32) = G_AMDGPU_FFBL_B32 [[UV1]](s64)
146     ; CHECK-NEXT: [[UMIN1:%[0-9]+]]:_(s32) = G_UMIN [[AMDGPU_FFBL_B32_1]], [[C]]
147     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[UMIN]](s32), [[UMIN1]](s32)
148     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
149     %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
150     %1:_(<2 x s32>) = G_CTTZ %0
151     $vgpr0_vgpr1 = COPY %1
155 name: cttz_v2s16_v2s16
157 body: |
158   bb.0:
159     liveins: $vgpr0
160     ; CHECK-LABEL: name: cttz_v2s16_v2s16
161     ; CHECK: liveins: $vgpr0
162     ; CHECK-NEXT: {{  $}}
163     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
164     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
165     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
166     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
167     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65536
168     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[BITCAST]], [[C1]]
169     ; CHECK-NEXT: [[CTTZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTTZ_ZERO_UNDEF [[OR]](s32)
170     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[CTTZ_ZERO_UNDEF]](s32)
171     ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[LSHR]], [[C1]]
172     ; CHECK-NEXT: [[CTTZ_ZERO_UNDEF1:%[0-9]+]]:_(s32) = G_CTTZ_ZERO_UNDEF [[OR1]](s32)
173     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[CTTZ_ZERO_UNDEF1]](s32)
174     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
175     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]]
176     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
177     ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32)
178     ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
179     ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32)
180     ; CHECK-NEXT: $vgpr0 = COPY [[BITCAST1]](<2 x s16>)
181     %0:_(<2 x s16>) = COPY $vgpr0
182     %1:_(<2 x s16>) = G_CTTZ %0
183     $vgpr0 = COPY %1
187 name: cttz_s7_s7
189 body: |
190   bb.0:
191     liveins: $vgpr0
193     ; CHECK-LABEL: name: cttz_s7_s7
194     ; CHECK: liveins: $vgpr0
195     ; CHECK-NEXT: {{  $}}
196     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
197     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 128
198     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY]], [[C]]
199     ; CHECK-NEXT: [[CTTZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTTZ_ZERO_UNDEF [[OR]](s32)
200     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[CTTZ_ZERO_UNDEF]](s32)
201     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 127
202     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
203     ; CHECK-NEXT: $vgpr0 = COPY [[AND]](s32)
204     %0:_(s32) = COPY $vgpr0
205     %1:_(s7) = G_TRUNC %0
206     %2:_(s7) = G_CTTZ %1
207     %3:_(s32) = G_ZEXT %2
208     $vgpr0 = COPY %3
212 name: cttz_s33_s33
214 body: |
215   bb.0:
216     liveins: $vgpr0_vgpr1
218     ; CHECK-LABEL: name: cttz_s33_s33
219     ; CHECK: liveins: $vgpr0_vgpr1
220     ; CHECK-NEXT: {{  $}}
221     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
222     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8589934592
223     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[C]]
224     ; CHECK-NEXT: [[CTTZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTTZ_ZERO_UNDEF [[OR]](s64)
225     ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[CTTZ_ZERO_UNDEF]](s32)
226     ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[ZEXT]](s64)
227     %0:_(s64) = COPY $vgpr0_vgpr1
228     %1:_(s33) = G_TRUNC %0
229     %2:_(s33) = G_CTTZ %1
230     %3:_(s64) = G_ANYEXT %2
231     $vgpr0_vgpr1 = COPY %3