Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Analysis / CostModel / X86 / ctlz.ll
blob565c42a366781cff2b7b43f0a3264e7c7710ccea
1 ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=-lzcnt,+sse2 | FileCheck %s -check-prefixes=NOLZCNT
3 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+lzcnt,+sse2 | FileCheck %s -check-prefixes=LZCNT,SSE2
4 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+lzcnt,+sse4.2 | FileCheck %s -check-prefixes=LZCNT,SSE42
5 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+lzcnt,+avx | FileCheck %s -check-prefixes=LZCNT,AVX1
6 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+lzcnt,+avx2 | FileCheck %s -check-prefixes=LZCNT,AVX2
7 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+lzcnt,+avx512f | FileCheck %s -check-prefixes=LZCNT,AVX512,AVX512F
8 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+lzcnt,+avx512vl,+avx512bw,+avx512dq | FileCheck %s -check-prefixes=LZCNT,AVX512,AVX512BW
9 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -mattr=+lzcnt,+avx512vl,+avx512bw,+avx512dq,+avx512cd | FileCheck %s -check-prefixes=LZCNT,AVX512CD
11 ; Verify the cost of scalar leading zero count instructions.
13 declare i64 @llvm.ctlz.i64(i64, i1)
14 declare i32 @llvm.ctlz.i32(i32, i1)
15 declare i16 @llvm.ctlz.i16(i16, i1)
16 declare  i8 @llvm.ctlz.i8(i8, i1)
18 define i64 @var_ctlz_i64(i64 %a) {
19 ; NOLZCNT-LABEL: 'var_ctlz_i64'
20 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call i64 @llvm.ctlz.i64(i64 %a, i1 false)
21 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i64 %ctlz
23 ; LZCNT-LABEL: 'var_ctlz_i64'
24 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i64 @llvm.ctlz.i64(i64 %a, i1 false)
25 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i64 %ctlz
27   %ctlz = call i64 @llvm.ctlz.i64(i64 %a, i1 0)
28   ret i64 %ctlz
31 define i64 @var_ctlz_i64u(i64 %a) {
32 ; NOLZCNT-LABEL: 'var_ctlz_i64u'
33 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i64 @llvm.ctlz.i64(i64 %a, i1 true)
34 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i64 %ctlz
36 ; LZCNT-LABEL: 'var_ctlz_i64u'
37 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i64 @llvm.ctlz.i64(i64 %a, i1 true)
38 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i64 %ctlz
40   %ctlz = call i64 @llvm.ctlz.i64(i64 %a, i1 1)
41   ret i64 %ctlz
44 define i32 @var_ctlz_i32(i32 %a) {
45 ; NOLZCNT-LABEL: 'var_ctlz_i32'
46 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call i32 @llvm.ctlz.i32(i32 %a, i1 false)
47 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 %ctlz
49 ; LZCNT-LABEL: 'var_ctlz_i32'
50 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i32 @llvm.ctlz.i32(i32 %a, i1 false)
51 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 %ctlz
53   %ctlz = call i32 @llvm.ctlz.i32(i32 %a, i1 0)
54   ret i32 %ctlz
57 define i32 @var_ctlz_i32u(i32 %a) {
58 ; NOLZCNT-LABEL: 'var_ctlz_i32u'
59 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i32 @llvm.ctlz.i32(i32 %a, i1 true)
60 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 %ctlz
62 ; LZCNT-LABEL: 'var_ctlz_i32u'
63 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i32 @llvm.ctlz.i32(i32 %a, i1 true)
64 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 %ctlz
66   %ctlz = call i32 @llvm.ctlz.i32(i32 %a, i1 1)
67   ret i32 %ctlz
70 define i16 @var_ctlz_i16(i16 %a) {
71 ; NOLZCNT-LABEL: 'var_ctlz_i16'
72 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call i16 @llvm.ctlz.i16(i16 %a, i1 false)
73 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i16 %ctlz
75 ; LZCNT-LABEL: 'var_ctlz_i16'
76 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call i16 @llvm.ctlz.i16(i16 %a, i1 false)
77 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i16 %ctlz
79   %ctlz = call i16 @llvm.ctlz.i16(i16 %a, i1 0)
80   ret i16 %ctlz
83 define i16 @var_ctlz_i16u(i16 %a) {
84 ; NOLZCNT-LABEL: 'var_ctlz_i16u'
85 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call i16 @llvm.ctlz.i16(i16 %a, i1 true)
86 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i16 %ctlz
88 ; LZCNT-LABEL: 'var_ctlz_i16u'
89 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call i16 @llvm.ctlz.i16(i16 %a, i1 true)
90 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i16 %ctlz
92   %ctlz = call i16 @llvm.ctlz.i16(i16 %a, i1 1)
93   ret i16 %ctlz
96 define i8 @var_ctlz_i8(i8 %a) {
97 ; NOLZCNT-LABEL: 'var_ctlz_i8'
98 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call i8 @llvm.ctlz.i8(i8 %a, i1 false)
99 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i8 %ctlz
101 ; LZCNT-LABEL: 'var_ctlz_i8'
102 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call i8 @llvm.ctlz.i8(i8 %a, i1 false)
103 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i8 %ctlz
105   %ctlz = call i8 @llvm.ctlz.i8(i8 %a, i1 0)
106   ret i8 %ctlz
109 define i8 @var_ctlz_i8u(i8 %a) {
110 ; NOLZCNT-LABEL: 'var_ctlz_i8u'
111 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call i8 @llvm.ctlz.i8(i8 %a, i1 true)
112 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i8 %ctlz
114 ; LZCNT-LABEL: 'var_ctlz_i8u'
115 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call i8 @llvm.ctlz.i8(i8 %a, i1 true)
116 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i8 %ctlz
118   %ctlz = call i8 @llvm.ctlz.i8(i8 %a, i1 1)
119   ret i8 %ctlz
122 ; Verify the cost of vector leading zero count instructions.
124 declare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1)
125 declare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1)
126 declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1)
127 declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1)
129 declare <4 x i64> @llvm.ctlz.v4i64(<4 x i64>, i1)
130 declare <8 x i32> @llvm.ctlz.v8i32(<8 x i32>, i1)
131 declare <16 x i16> @llvm.ctlz.v16i16(<16 x i16>, i1)
132 declare <32 x i8> @llvm.ctlz.v32i8(<32 x i8>, i1)
134 declare <8 x i64> @llvm.ctlz.v8i64(<8 x i64>, i1)
135 declare <16 x i32> @llvm.ctlz.v16i32(<16 x i32>, i1)
136 declare <32 x i16> @llvm.ctlz.v32i16(<32 x i16>, i1)
137 declare <64 x i8> @llvm.ctlz.v64i8(<64 x i8>, i1)
139 define <2 x i64> @var_ctlz_v2i64(<2 x i64> %a) {
140 ; NOLZCNT-LABEL: 'var_ctlz_v2i64'
141 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
142 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
144 ; SSE2-LABEL: 'var_ctlz_v2i64'
145 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
146 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
148 ; SSE42-LABEL: 'var_ctlz_v2i64'
149 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
150 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
152 ; AVX1-LABEL: 'var_ctlz_v2i64'
153 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
154 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
156 ; AVX2-LABEL: 'var_ctlz_v2i64'
157 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
158 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
160 ; AVX512-LABEL: 'var_ctlz_v2i64'
161 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
162 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
164 ; AVX512CD-LABEL: 'var_ctlz_v2i64'
165 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
166 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
168 ; AVX-LABEL: 'var_ctlz_v2i64'
169 ; AVX-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
170 ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
171   %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 0)
172   ret <2 x i64> %ctlz
175 define <2 x i64> @var_ctlz_v2i64u(<2 x i64> %a) {
176 ; NOLZCNT-LABEL: 'var_ctlz_v2i64u'
177 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
178 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
180 ; SSE2-LABEL: 'var_ctlz_v2i64u'
181 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
182 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
184 ; SSE42-LABEL: 'var_ctlz_v2i64u'
185 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
186 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
188 ; AVX1-LABEL: 'var_ctlz_v2i64u'
189 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
190 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
192 ; AVX2-LABEL: 'var_ctlz_v2i64u'
193 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
194 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
196 ; AVX512-LABEL: 'var_ctlz_v2i64u'
197 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
198 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
200 ; AVX512CD-LABEL: 'var_ctlz_v2i64u'
201 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
202 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
204 ; AVX-LABEL: 'var_ctlz_v2i64u'
205 ; AVX-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
206 ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %ctlz
207   %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 1)
208   ret <2 x i64> %ctlz
211 define <4 x i64> @var_ctlz_v4i64(<4 x i64> %a) {
212 ; NOLZCNT-LABEL: 'var_ctlz_v4i64'
213 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
214 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
216 ; SSE2-LABEL: 'var_ctlz_v4i64'
217 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
218 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
220 ; SSE42-LABEL: 'var_ctlz_v4i64'
221 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
222 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
224 ; AVX1-LABEL: 'var_ctlz_v4i64'
225 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 29 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
226 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
228 ; AVX2-LABEL: 'var_ctlz_v4i64'
229 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
230 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
232 ; AVX512-LABEL: 'var_ctlz_v4i64'
233 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
234 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
236 ; AVX512CD-LABEL: 'var_ctlz_v4i64'
237 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
238 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
240   %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 0)
241   ret <4 x i64> %ctlz
244 define <4 x i64> @var_ctlz_v4i64u(<4 x i64> %a) {
245 ; NOLZCNT-LABEL: 'var_ctlz_v4i64u'
246 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
247 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
249 ; SSE2-LABEL: 'var_ctlz_v4i64u'
250 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
251 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
253 ; SSE42-LABEL: 'var_ctlz_v4i64u'
254 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
255 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
257 ; AVX1-LABEL: 'var_ctlz_v4i64u'
258 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 29 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
259 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
261 ; AVX2-LABEL: 'var_ctlz_v4i64u'
262 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
263 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
265 ; AVX512-LABEL: 'var_ctlz_v4i64u'
266 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
267 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
269 ; AVX512CD-LABEL: 'var_ctlz_v4i64u'
270 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
271 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %ctlz
273   %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 1)
274   ret <4 x i64> %ctlz
277 define <8 x i64> @var_ctlz_v8i64(<8 x i64> %a) {
278 ; NOLZCNT-LABEL: 'var_ctlz_v8i64'
279 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
280 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
282 ; SSE2-LABEL: 'var_ctlz_v8i64'
283 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
284 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
286 ; SSE42-LABEL: 'var_ctlz_v8i64'
287 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 72 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
288 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
290 ; AVX1-LABEL: 'var_ctlz_v8i64'
291 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 58 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
292 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
294 ; AVX2-LABEL: 'var_ctlz_v8i64'
295 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
296 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
298 ; AVX512F-LABEL: 'var_ctlz_v8i64'
299 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
300 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
302 ; AVX512BW-LABEL: 'var_ctlz_v8i64'
303 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
304 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
306 ; AVX512CD-LABEL: 'var_ctlz_v8i64'
307 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
308 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
310   %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 0)
311   ret <8 x i64> %ctlz
314 define <8 x i64> @var_ctlz_v8i64u(<8 x i64> %a) {
315 ; NOLZCNT-LABEL: 'var_ctlz_v8i64u'
316 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
317 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
319 ; SSE2-LABEL: 'var_ctlz_v8i64u'
320 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
321 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
323 ; SSE42-LABEL: 'var_ctlz_v8i64u'
324 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 72 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
325 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
327 ; AVX1-LABEL: 'var_ctlz_v8i64u'
328 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 58 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
329 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
331 ; AVX2-LABEL: 'var_ctlz_v8i64u'
332 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
333 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
335 ; AVX512F-LABEL: 'var_ctlz_v8i64u'
336 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
337 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
339 ; AVX512BW-LABEL: 'var_ctlz_v8i64u'
340 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
341 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
343 ; AVX512CD-LABEL: 'var_ctlz_v8i64u'
344 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
345 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %ctlz
347   %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 1)
348   ret <8 x i64> %ctlz
351 define <4 x i32> @var_ctlz_v4i32(<4 x i32> %a) {
352 ; NOLZCNT-LABEL: 'var_ctlz_v4i32'
353 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
354 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
356 ; SSE2-LABEL: 'var_ctlz_v4i32'
357 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
358 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
360 ; SSE42-LABEL: 'var_ctlz_v4i32'
361 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
362 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
364 ; AVX1-LABEL: 'var_ctlz_v4i32'
365 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
366 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
368 ; AVX2-LABEL: 'var_ctlz_v4i32'
369 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
370 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
372 ; AVX512-LABEL: 'var_ctlz_v4i32'
373 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
374 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
376 ; AVX512CD-LABEL: 'var_ctlz_v4i32'
377 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
378 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
380 ; AVX-LABEL: 'var_ctlz_v4i32'
381 ; AVX-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
382 ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
383   %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 0)
384   ret <4 x i32> %ctlz
387 define <4 x i32> @var_ctlz_v4i32u(<4 x i32> %a) {
388 ; NOLZCNT-LABEL: 'var_ctlz_v4i32u'
389 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
390 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
392 ; SSE2-LABEL: 'var_ctlz_v4i32u'
393 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
394 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
396 ; SSE42-LABEL: 'var_ctlz_v4i32u'
397 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
398 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
400 ; AVX1-LABEL: 'var_ctlz_v4i32u'
401 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
402 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
404 ; AVX2-LABEL: 'var_ctlz_v4i32u'
405 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
406 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
408 ; AVX512-LABEL: 'var_ctlz_v4i32u'
409 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 5 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
410 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
412 ; AVX512CD-LABEL: 'var_ctlz_v4i32u'
413 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
414 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
416 ; AVX-LABEL: 'var_ctlz_v4i32u'
417 ; AVX-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
418 ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %ctlz
419   %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 1)
420   ret <4 x i32> %ctlz
423 define <8 x i32> @var_ctlz_v8i32(<8 x i32> %a) {
424 ; NOLZCNT-LABEL: 'var_ctlz_v8i32'
425 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
426 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
428 ; SSE2-LABEL: 'var_ctlz_v8i32'
429 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
430 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
432 ; SSE42-LABEL: 'var_ctlz_v8i32'
433 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
434 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
436 ; AVX1-LABEL: 'var_ctlz_v8i32'
437 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
438 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
440 ; AVX2-LABEL: 'var_ctlz_v8i32'
441 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
442 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
444 ; AVX512-LABEL: 'var_ctlz_v8i32'
445 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
446 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
448 ; AVX512CD-LABEL: 'var_ctlz_v8i32'
449 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
450 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
452   %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 0)
453   ret <8 x i32> %ctlz
456 define <8 x i32> @var_ctlz_v8i32u(<8 x i32> %a) {
457 ; NOLZCNT-LABEL: 'var_ctlz_v8i32u'
458 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
459 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
461 ; SSE2-LABEL: 'var_ctlz_v8i32u'
462 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
463 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
465 ; SSE42-LABEL: 'var_ctlz_v8i32u'
466 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
467 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
469 ; AVX1-LABEL: 'var_ctlz_v8i32u'
470 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
471 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
473 ; AVX2-LABEL: 'var_ctlz_v8i32u'
474 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
475 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
477 ; AVX512-LABEL: 'var_ctlz_v8i32u'
478 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
479 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
481 ; AVX512CD-LABEL: 'var_ctlz_v8i32u'
482 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
483 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %ctlz
485   %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 1)
486   ret <8 x i32> %ctlz
489 define <16 x i32> @var_ctlz_v16i32(<16 x i32> %a) {
490 ; NOLZCNT-LABEL: 'var_ctlz_v16i32'
491 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
492 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
494 ; SSE2-LABEL: 'var_ctlz_v16i32'
495 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
496 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
498 ; SSE42-LABEL: 'var_ctlz_v16i32'
499 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 60 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
500 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
502 ; AVX1-LABEL: 'var_ctlz_v16i32'
503 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
504 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
506 ; AVX2-LABEL: 'var_ctlz_v16i32'
507 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
508 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
510 ; AVX512F-LABEL: 'var_ctlz_v16i32'
511 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
512 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
514 ; AVX512BW-LABEL: 'var_ctlz_v16i32'
515 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
516 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
518 ; AVX512CD-LABEL: 'var_ctlz_v16i32'
519 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
520 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
522   %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 0)
523   ret <16 x i32> %ctlz
526 define <16 x i32> @var_ctlz_v16i32u(<16 x i32> %a) {
527 ; NOLZCNT-LABEL: 'var_ctlz_v16i32u'
528 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
529 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
531 ; SSE2-LABEL: 'var_ctlz_v16i32u'
532 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
533 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
535 ; SSE42-LABEL: 'var_ctlz_v16i32u'
536 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 60 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
537 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
539 ; AVX1-LABEL: 'var_ctlz_v16i32u'
540 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
541 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
543 ; AVX2-LABEL: 'var_ctlz_v16i32u'
544 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
545 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
547 ; AVX512F-LABEL: 'var_ctlz_v16i32u'
548 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
549 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
551 ; AVX512BW-LABEL: 'var_ctlz_v16i32u'
552 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
553 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
555 ; AVX512CD-LABEL: 'var_ctlz_v16i32u'
556 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
557 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %ctlz
559   %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 1)
560   ret <16 x i32> %ctlz
563 define <8 x i16> @var_ctlz_v8i16(<8 x i16> %a) {
564 ; NOLZCNT-LABEL: 'var_ctlz_v8i16'
565 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
566 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
568 ; SSE2-LABEL: 'var_ctlz_v8i16'
569 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
570 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
572 ; SSE42-LABEL: 'var_ctlz_v8i16'
573 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
574 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
576 ; AVX1-LABEL: 'var_ctlz_v8i16'
577 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
578 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
580 ; AVX2-LABEL: 'var_ctlz_v8i16'
581 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
582 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
584 ; AVX512-LABEL: 'var_ctlz_v8i16'
585 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
586 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
588 ; AVX512CD-LABEL: 'var_ctlz_v8i16'
589 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
590 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
592 ; AVX-LABEL: 'var_ctlz_v8i16'
593 ; AVX-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
594 ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
595   %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 0)
596   ret <8 x i16> %ctlz
599 define <8 x i16> @var_ctlz_v8i16u(<8 x i16> %a) {
600 ; NOLZCNT-LABEL: 'var_ctlz_v8i16u'
601 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
602 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
604 ; SSE2-LABEL: 'var_ctlz_v8i16u'
605 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
606 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
608 ; SSE42-LABEL: 'var_ctlz_v8i16u'
609 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
610 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
612 ; AVX1-LABEL: 'var_ctlz_v8i16u'
613 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
614 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
616 ; AVX2-LABEL: 'var_ctlz_v8i16u'
617 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
618 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
620 ; AVX512-LABEL: 'var_ctlz_v8i16u'
621 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
622 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
624 ; AVX512CD-LABEL: 'var_ctlz_v8i16u'
625 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
626 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
628 ; AVX-LABEL: 'var_ctlz_v8i16u'
629 ; AVX-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
630 ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %ctlz
631   %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 1)
632   ret <8 x i16> %ctlz
635 define <16 x i16> @var_ctlz_v16i16(<16 x i16> %a) {
636 ; NOLZCNT-LABEL: 'var_ctlz_v16i16'
637 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
638 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
640 ; SSE2-LABEL: 'var_ctlz_v16i16'
641 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
642 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
644 ; SSE42-LABEL: 'var_ctlz_v16i16'
645 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
646 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
648 ; AVX1-LABEL: 'var_ctlz_v16i16'
649 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
650 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
652 ; AVX2-LABEL: 'var_ctlz_v16i16'
653 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
654 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
656 ; AVX512-LABEL: 'var_ctlz_v16i16'
657 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
658 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
660 ; AVX512CD-LABEL: 'var_ctlz_v16i16'
661 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
662 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
664   %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 0)
665   ret <16 x i16> %ctlz
668 define <16 x i16> @var_ctlz_v16i16u(<16 x i16> %a) {
669 ; NOLZCNT-LABEL: 'var_ctlz_v16i16u'
670 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
671 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
673 ; SSE2-LABEL: 'var_ctlz_v16i16u'
674 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
675 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
677 ; SSE42-LABEL: 'var_ctlz_v16i16u'
678 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
679 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
681 ; AVX1-LABEL: 'var_ctlz_v16i16u'
682 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
683 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
685 ; AVX2-LABEL: 'var_ctlz_v16i16u'
686 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
687 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
689 ; AVX512-LABEL: 'var_ctlz_v16i16u'
690 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
691 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
693 ; AVX512CD-LABEL: 'var_ctlz_v16i16u'
694 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
695 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %ctlz
697   %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 1)
698   ret <16 x i16> %ctlz
701 define <32 x i16> @var_ctlz_v32i16(<32 x i16> %a) {
702 ; NOLZCNT-LABEL: 'var_ctlz_v32i16'
703 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
704 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
706 ; SSE2-LABEL: 'var_ctlz_v32i16'
707 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
708 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
710 ; SSE42-LABEL: 'var_ctlz_v32i16'
711 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 52 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
712 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
714 ; AVX1-LABEL: 'var_ctlz_v32i16'
715 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
716 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
718 ; AVX2-LABEL: 'var_ctlz_v32i16'
719 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
720 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
722 ; AVX512F-LABEL: 'var_ctlz_v32i16'
723 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
724 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
726 ; AVX512BW-LABEL: 'var_ctlz_v32i16'
727 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
728 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
730 ; AVX512CD-LABEL: 'var_ctlz_v32i16'
731 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
732 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
734   %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 0)
735   ret <32 x i16> %ctlz
738 define <32 x i16> @var_ctlz_v32i16u(<32 x i16> %a) {
739 ; NOLZCNT-LABEL: 'var_ctlz_v32i16u'
740 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
741 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
743 ; SSE2-LABEL: 'var_ctlz_v32i16u'
744 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
745 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
747 ; SSE42-LABEL: 'var_ctlz_v32i16u'
748 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 52 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
749 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
751 ; AVX1-LABEL: 'var_ctlz_v32i16u'
752 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
753 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
755 ; AVX2-LABEL: 'var_ctlz_v32i16u'
756 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
757 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
759 ; AVX512F-LABEL: 'var_ctlz_v32i16u'
760 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
761 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
763 ; AVX512BW-LABEL: 'var_ctlz_v32i16u'
764 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
765 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
767 ; AVX512CD-LABEL: 'var_ctlz_v32i16u'
768 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
769 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %ctlz
771   %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 1)
772   ret <32 x i16> %ctlz
775 define <16 x i8> @var_ctlz_v16i8(<16 x i8> %a) {
776 ; NOLZCNT-LABEL: 'var_ctlz_v16i8'
777 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
778 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
780 ; SSE2-LABEL: 'var_ctlz_v16i8'
781 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
782 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
784 ; SSE42-LABEL: 'var_ctlz_v16i8'
785 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
786 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
788 ; AVX1-LABEL: 'var_ctlz_v16i8'
789 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
790 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
792 ; AVX2-LABEL: 'var_ctlz_v16i8'
793 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
794 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
796 ; AVX512-LABEL: 'var_ctlz_v16i8'
797 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
798 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
800 ; AVX512CD-LABEL: 'var_ctlz_v16i8'
801 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
802 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
804 ; AVX-LABEL: 'var_ctlz_v16i8'
805 ; AVX-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
806 ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
807   %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 0)
808   ret <16 x i8> %ctlz
811 define <16 x i8> @var_ctlz_v16i8u(<16 x i8> %a) {
812 ; NOLZCNT-LABEL: 'var_ctlz_v16i8u'
813 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
814 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
816 ; SSE2-LABEL: 'var_ctlz_v16i8u'
817 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
818 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
820 ; SSE42-LABEL: 'var_ctlz_v16i8u'
821 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
822 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
824 ; AVX1-LABEL: 'var_ctlz_v16i8u'
825 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
826 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
828 ; AVX2-LABEL: 'var_ctlz_v16i8u'
829 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
830 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
832 ; AVX512-LABEL: 'var_ctlz_v16i8u'
833 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
834 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
836 ; AVX512CD-LABEL: 'var_ctlz_v16i8u'
837 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
838 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
840 ; AVX-LABEL: 'var_ctlz_v16i8u'
841 ; AVX-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
842 ; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %ctlz
843   %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 1)
844   ret <16 x i8> %ctlz
847 define <32 x i8> @var_ctlz_v32i8(<32 x i8> %a) {
848 ; NOLZCNT-LABEL: 'var_ctlz_v32i8'
849 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
850 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
852 ; SSE2-LABEL: 'var_ctlz_v32i8'
853 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
854 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
856 ; SSE42-LABEL: 'var_ctlz_v32i8'
857 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
858 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
860 ; AVX1-LABEL: 'var_ctlz_v32i8'
861 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
862 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
864 ; AVX2-LABEL: 'var_ctlz_v32i8'
865 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
866 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
868 ; AVX512-LABEL: 'var_ctlz_v32i8'
869 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
870 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
872 ; AVX512CD-LABEL: 'var_ctlz_v32i8'
873 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
874 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
876   %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 0)
877   ret <32 x i8> %ctlz
880 define <32 x i8> @var_ctlz_v32i8u(<32 x i8> %a) {
881 ; NOLZCNT-LABEL: 'var_ctlz_v32i8u'
882 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
883 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
885 ; SSE2-LABEL: 'var_ctlz_v32i8u'
886 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
887 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
889 ; SSE42-LABEL: 'var_ctlz_v32i8u'
890 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
891 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
893 ; AVX1-LABEL: 'var_ctlz_v32i8u'
894 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
895 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
897 ; AVX2-LABEL: 'var_ctlz_v32i8u'
898 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
899 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
901 ; AVX512-LABEL: 'var_ctlz_v32i8u'
902 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 4 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
903 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
905 ; AVX512CD-LABEL: 'var_ctlz_v32i8u'
906 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
907 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %ctlz
909   %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 1)
910   ret <32 x i8> %ctlz
913 define <64 x i8> @var_ctlz_v64i8(<64 x i8> %a) {
914 ; NOLZCNT-LABEL: 'var_ctlz_v64i8'
915 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
916 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
918 ; SSE2-LABEL: 'var_ctlz_v64i8'
919 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
920 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
922 ; SSE42-LABEL: 'var_ctlz_v64i8'
923 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
924 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
926 ; AVX1-LABEL: 'var_ctlz_v64i8'
927 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
928 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
930 ; AVX2-LABEL: 'var_ctlz_v64i8'
931 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
932 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
934 ; AVX512F-LABEL: 'var_ctlz_v64i8'
935 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
936 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
938 ; AVX512BW-LABEL: 'var_ctlz_v64i8'
939 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
940 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
942 ; AVX512CD-LABEL: 'var_ctlz_v64i8'
943 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
944 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
946   %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 0)
947   ret <64 x i8> %ctlz
950 define <64 x i8> @var_ctlz_v64i8u(<64 x i8> %a) {
951 ; NOLZCNT-LABEL: 'var_ctlz_v64i8u'
952 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
953 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
955 ; SSE2-LABEL: 'var_ctlz_v64i8u'
956 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
957 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
959 ; SSE42-LABEL: 'var_ctlz_v64i8u'
960 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
961 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
963 ; AVX1-LABEL: 'var_ctlz_v64i8u'
964 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
965 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
967 ; AVX2-LABEL: 'var_ctlz_v64i8u'
968 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
969 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
971 ; AVX512F-LABEL: 'var_ctlz_v64i8u'
972 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
973 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
975 ; AVX512BW-LABEL: 'var_ctlz_v64i8u'
976 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
977 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
979 ; AVX512CD-LABEL: 'var_ctlz_v64i8u'
980 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
981 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %ctlz
983   %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 1)
984   ret <64 x i8> %ctlz