Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Analysis / CostModel / X86 / ctlz-sizelatency.ll
blob511b5bef56db248040b61937a02a518f8bd2f67a
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 -cost-kind=size-latency -mattr=-lzcnt,+sse2 | FileCheck %s -check-prefixes=CHECK,NOLZCNT
3 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mattr=+lzcnt,+sse2 | FileCheck %s -check-prefixes=CHECK,LZCNT,SSE2
4 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mattr=+lzcnt,+sse4.2 | FileCheck %s -check-prefixes=CHECK,LZCNT,SSE42
5 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mattr=+lzcnt,+avx | FileCheck %s -check-prefixes=CHECK,LZCNT,AVX1
6 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mattr=+lzcnt,+avx2 | FileCheck %s -check-prefixes=CHECK,LZCNT,AVX2
7 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mattr=+lzcnt,+avx512f | FileCheck %s -check-prefixes=CHECK,LZCNT,AVX512,AVX512F
8 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mattr=+lzcnt,+avx512vl,+avx512bw,+avx512dq | FileCheck %s -check-prefixes=CHECK,LZCNT,AVX512,AVX512BW
9 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mattr=+lzcnt,+avx512vl,+avx512bw,+avx512dq,+avx512cd | FileCheck %s -check-prefixes=CHECK,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 2 for instruction: %ctlz = call i64 @llvm.ctlz.i64(i64 %a, i1 false)
21 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 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 1 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 ; CHECK-LABEL: 'var_ctlz_i64u'
33 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i64 @llvm.ctlz.i64(i64 %a, i1 true)
34 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i64 %ctlz
36   %ctlz = call i64 @llvm.ctlz.i64(i64 %a, i1 1)
37   ret i64 %ctlz
40 define i32 @var_ctlz_i32(i32 %a) {
41 ; NOLZCNT-LABEL: 'var_ctlz_i32'
42 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call i32 @llvm.ctlz.i32(i32 %a, i1 false)
43 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 %ctlz
45 ; LZCNT-LABEL: 'var_ctlz_i32'
46 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i32 @llvm.ctlz.i32(i32 %a, i1 false)
47 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 %ctlz
49   %ctlz = call i32 @llvm.ctlz.i32(i32 %a, i1 0)
50   ret i32 %ctlz
53 define i32 @var_ctlz_i32u(i32 %a) {
54 ; CHECK-LABEL: 'var_ctlz_i32u'
55 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i32 @llvm.ctlz.i32(i32 %a, i1 true)
56 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 %ctlz
58   %ctlz = call i32 @llvm.ctlz.i32(i32 %a, i1 1)
59   ret i32 %ctlz
62 define i16 @var_ctlz_i16(i16 %a) {
63 ; NOLZCNT-LABEL: 'var_ctlz_i16'
64 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call i16 @llvm.ctlz.i16(i16 %a, i1 false)
65 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i16 %ctlz
67 ; LZCNT-LABEL: 'var_ctlz_i16'
68 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i16 @llvm.ctlz.i16(i16 %a, i1 false)
69 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i16 %ctlz
71   %ctlz = call i16 @llvm.ctlz.i16(i16 %a, i1 0)
72   ret i16 %ctlz
75 define i16 @var_ctlz_i16u(i16 %a) {
76 ; NOLZCNT-LABEL: 'var_ctlz_i16u'
77 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %ctlz = call i16 @llvm.ctlz.i16(i16 %a, i1 true)
78 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i16 %ctlz
80 ; LZCNT-LABEL: 'var_ctlz_i16u'
81 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i16 @llvm.ctlz.i16(i16 %a, i1 true)
82 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i16 %ctlz
84   %ctlz = call i16 @llvm.ctlz.i16(i16 %a, i1 1)
85   ret i16 %ctlz
88 define i8 @var_ctlz_i8(i8 %a) {
89 ; NOLZCNT-LABEL: 'var_ctlz_i8'
90 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %ctlz = call i8 @llvm.ctlz.i8(i8 %a, i1 false)
91 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i8 %ctlz
93 ; LZCNT-LABEL: 'var_ctlz_i8'
94 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i8 @llvm.ctlz.i8(i8 %a, i1 false)
95 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i8 %ctlz
97   %ctlz = call i8 @llvm.ctlz.i8(i8 %a, i1 0)
98   ret i8 %ctlz
101 define i8 @var_ctlz_i8u(i8 %a) {
102 ; NOLZCNT-LABEL: 'var_ctlz_i8u'
103 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 3 for instruction: %ctlz = call i8 @llvm.ctlz.i8(i8 %a, i1 true)
104 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i8 %ctlz
106 ; LZCNT-LABEL: 'var_ctlz_i8u'
107 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %ctlz = call i8 @llvm.ctlz.i8(i8 %a, i1 true)
108 ; LZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i8 %ctlz
110   %ctlz = call i8 @llvm.ctlz.i8(i8 %a, i1 1)
111   ret i8 %ctlz
114 ; Verify the cost of vector leading zero count instructions.
116 declare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1)
117 declare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1)
118 declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1)
119 declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1)
121 declare <4 x i64> @llvm.ctlz.v4i64(<4 x i64>, i1)
122 declare <8 x i32> @llvm.ctlz.v8i32(<8 x i32>, i1)
123 declare <16 x i16> @llvm.ctlz.v16i16(<16 x i16>, i1)
124 declare <32 x i8> @llvm.ctlz.v32i8(<32 x i8>, i1)
126 declare <8 x i64> @llvm.ctlz.v8i64(<8 x i64>, i1)
127 declare <16 x i32> @llvm.ctlz.v16i32(<16 x i32>, i1)
128 declare <32 x i16> @llvm.ctlz.v32i16(<32 x i16>, i1)
129 declare <64 x i8> @llvm.ctlz.v64i8(<64 x i8>, i1)
131 define <2 x i64> @var_ctlz_v2i64(<2 x i64> %a) {
132 ; NOLZCNT-LABEL: 'var_ctlz_v2i64'
133 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
134 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
136 ; SSE2-LABEL: 'var_ctlz_v2i64'
137 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
138 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
140 ; SSE42-LABEL: 'var_ctlz_v2i64'
141 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 35 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
142 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
144 ; AVX1-LABEL: 'var_ctlz_v2i64'
145 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
146 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
148 ; AVX2-LABEL: 'var_ctlz_v2i64'
149 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
150 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
152 ; AVX512-LABEL: 'var_ctlz_v2i64'
153 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false)
154 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
156 ; AVX512CD-LABEL: 'var_ctlz_v2i64'
157 ; 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)
158 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
160   %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 0)
161   ret <2 x i64> %ctlz
164 define <2 x i64> @var_ctlz_v2i64u(<2 x i64> %a) {
165 ; NOLZCNT-LABEL: 'var_ctlz_v2i64u'
166 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
167 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
169 ; SSE2-LABEL: 'var_ctlz_v2i64u'
170 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
171 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
173 ; SSE42-LABEL: 'var_ctlz_v2i64u'
174 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 35 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
175 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
177 ; AVX1-LABEL: 'var_ctlz_v2i64u'
178 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
179 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
181 ; AVX2-LABEL: 'var_ctlz_v2i64u'
182 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
183 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
185 ; AVX512-LABEL: 'var_ctlz_v2i64u'
186 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 true)
187 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
189 ; AVX512CD-LABEL: 'var_ctlz_v2i64u'
190 ; 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)
191 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %ctlz
193   %ctlz = call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 1)
194   ret <2 x i64> %ctlz
197 define <4 x i64> @var_ctlz_v4i64(<4 x i64> %a) {
198 ; NOLZCNT-LABEL: 'var_ctlz_v4i64'
199 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
200 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
202 ; SSE2-LABEL: 'var_ctlz_v4i64'
203 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
204 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
206 ; SSE42-LABEL: 'var_ctlz_v4i64'
207 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 70 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
208 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
210 ; AVX1-LABEL: 'var_ctlz_v4i64'
211 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 58 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
212 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
214 ; AVX2-LABEL: 'var_ctlz_v4i64'
215 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
216 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
218 ; AVX512-LABEL: 'var_ctlz_v4i64'
219 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 false)
220 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
222 ; AVX512CD-LABEL: 'var_ctlz_v4i64'
223 ; 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)
224 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
226   %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 0)
227   ret <4 x i64> %ctlz
230 define <4 x i64> @var_ctlz_v4i64u(<4 x i64> %a) {
231 ; NOLZCNT-LABEL: 'var_ctlz_v4i64u'
232 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
233 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
235 ; SSE2-LABEL: 'var_ctlz_v4i64u'
236 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
237 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
239 ; SSE42-LABEL: 'var_ctlz_v4i64u'
240 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 70 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
241 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
243 ; AVX1-LABEL: 'var_ctlz_v4i64u'
244 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 58 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
245 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
247 ; AVX2-LABEL: 'var_ctlz_v4i64u'
248 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
249 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
251 ; AVX512-LABEL: 'var_ctlz_v4i64u'
252 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 true)
253 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
255 ; AVX512CD-LABEL: 'var_ctlz_v4i64u'
256 ; 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)
257 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %ctlz
259   %ctlz = call <4 x i64> @llvm.ctlz.v4i64(<4 x i64> %a, i1 1)
260   ret <4 x i64> %ctlz
263 define <8 x i64> @var_ctlz_v8i64(<8 x i64> %a) {
264 ; NOLZCNT-LABEL: 'var_ctlz_v8i64'
265 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 152 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
266 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
268 ; SSE2-LABEL: 'var_ctlz_v8i64'
269 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 152 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
270 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
272 ; SSE42-LABEL: 'var_ctlz_v8i64'
273 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 140 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
274 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
276 ; AVX1-LABEL: 'var_ctlz_v8i64'
277 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 116 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
278 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
280 ; AVX2-LABEL: 'var_ctlz_v8i64'
281 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 88 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
282 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
284 ; AVX512F-LABEL: 'var_ctlz_v8i64'
285 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
286 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
288 ; AVX512BW-LABEL: 'var_ctlz_v8i64'
289 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 false)
290 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
292 ; AVX512CD-LABEL: 'var_ctlz_v8i64'
293 ; 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)
294 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
296   %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 0)
297   ret <8 x i64> %ctlz
300 define <8 x i64> @var_ctlz_v8i64u(<8 x i64> %a) {
301 ; NOLZCNT-LABEL: 'var_ctlz_v8i64u'
302 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 152 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
303 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
305 ; SSE2-LABEL: 'var_ctlz_v8i64u'
306 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 152 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
307 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
309 ; SSE42-LABEL: 'var_ctlz_v8i64u'
310 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 140 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
311 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
313 ; AVX1-LABEL: 'var_ctlz_v8i64u'
314 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 116 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
315 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
317 ; AVX2-LABEL: 'var_ctlz_v8i64u'
318 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 88 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
319 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
321 ; AVX512F-LABEL: 'var_ctlz_v8i64u'
322 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
323 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
325 ; AVX512BW-LABEL: 'var_ctlz_v8i64u'
326 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 true)
327 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
329 ; AVX512CD-LABEL: 'var_ctlz_v8i64u'
330 ; 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)
331 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %ctlz
333   %ctlz = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %a, i1 1)
334   ret <8 x i64> %ctlz
337 define <4 x i32> @var_ctlz_v4i32(<4 x i32> %a) {
338 ; NOLZCNT-LABEL: 'var_ctlz_v4i32'
339 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
340 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
342 ; SSE2-LABEL: 'var_ctlz_v4i32'
343 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
344 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
346 ; SSE42-LABEL: 'var_ctlz_v4i32'
347 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
348 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
350 ; AVX1-LABEL: 'var_ctlz_v4i32'
351 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
352 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
354 ; AVX2-LABEL: 'var_ctlz_v4i32'
355 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
356 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
358 ; AVX512-LABEL: 'var_ctlz_v4i32'
359 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false)
360 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
362 ; AVX512CD-LABEL: 'var_ctlz_v4i32'
363 ; 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)
364 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
366   %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 0)
367   ret <4 x i32> %ctlz
370 define <4 x i32> @var_ctlz_v4i32u(<4 x i32> %a) {
371 ; NOLZCNT-LABEL: 'var_ctlz_v4i32u'
372 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
373 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
375 ; SSE2-LABEL: 'var_ctlz_v4i32u'
376 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
377 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
379 ; SSE42-LABEL: 'var_ctlz_v4i32u'
380 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
381 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
383 ; AVX1-LABEL: 'var_ctlz_v4i32u'
384 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
385 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
387 ; AVX2-LABEL: 'var_ctlz_v4i32u'
388 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
389 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
391 ; AVX512-LABEL: 'var_ctlz_v4i32u'
392 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 true)
393 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
395 ; AVX512CD-LABEL: 'var_ctlz_v4i32u'
396 ; 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)
397 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %ctlz
399   %ctlz = call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 1)
400   ret <4 x i32> %ctlz
403 define <8 x i32> @var_ctlz_v8i32(<8 x i32> %a) {
404 ; NOLZCNT-LABEL: 'var_ctlz_v8i32'
405 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
406 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
408 ; SSE2-LABEL: 'var_ctlz_v8i32'
409 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
410 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
412 ; SSE42-LABEL: 'var_ctlz_v8i32'
413 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 56 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
414 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
416 ; AVX1-LABEL: 'var_ctlz_v8i32'
417 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
418 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
420 ; AVX2-LABEL: 'var_ctlz_v8i32'
421 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
422 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
424 ; AVX512-LABEL: 'var_ctlz_v8i32'
425 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 false)
426 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
428 ; AVX512CD-LABEL: 'var_ctlz_v8i32'
429 ; 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)
430 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
432   %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 0)
433   ret <8 x i32> %ctlz
436 define <8 x i32> @var_ctlz_v8i32u(<8 x i32> %a) {
437 ; NOLZCNT-LABEL: 'var_ctlz_v8i32u'
438 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
439 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
441 ; SSE2-LABEL: 'var_ctlz_v8i32u'
442 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
443 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
445 ; SSE42-LABEL: 'var_ctlz_v8i32u'
446 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 56 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
447 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
449 ; AVX1-LABEL: 'var_ctlz_v8i32u'
450 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
451 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
453 ; AVX2-LABEL: 'var_ctlz_v8i32u'
454 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
455 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
457 ; AVX512-LABEL: 'var_ctlz_v8i32u'
458 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 true)
459 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
461 ; AVX512CD-LABEL: 'var_ctlz_v8i32u'
462 ; 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)
463 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %ctlz
465   %ctlz = call <8 x i32> @llvm.ctlz.v8i32(<8 x i32> %a, i1 1)
466   ret <8 x i32> %ctlz
469 define <16 x i32> @var_ctlz_v16i32(<16 x i32> %a) {
470 ; NOLZCNT-LABEL: 'var_ctlz_v16i32'
471 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 160 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
472 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
474 ; SSE2-LABEL: 'var_ctlz_v16i32'
475 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 160 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
476 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
478 ; SSE42-LABEL: 'var_ctlz_v16i32'
479 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 112 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
480 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
482 ; AVX1-LABEL: 'var_ctlz_v16i32'
483 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 96 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
484 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
486 ; AVX2-LABEL: 'var_ctlz_v16i32'
487 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 68 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
488 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
490 ; AVX512F-LABEL: 'var_ctlz_v16i32'
491 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
492 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
494 ; AVX512BW-LABEL: 'var_ctlz_v16i32'
495 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 false)
496 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
498 ; AVX512CD-LABEL: 'var_ctlz_v16i32'
499 ; 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)
500 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
502   %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 0)
503   ret <16 x i32> %ctlz
506 define <16 x i32> @var_ctlz_v16i32u(<16 x i32> %a) {
507 ; NOLZCNT-LABEL: 'var_ctlz_v16i32u'
508 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 160 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
509 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
511 ; SSE2-LABEL: 'var_ctlz_v16i32u'
512 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 160 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
513 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
515 ; SSE42-LABEL: 'var_ctlz_v16i32u'
516 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 112 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
517 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
519 ; AVX1-LABEL: 'var_ctlz_v16i32u'
520 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 96 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
521 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
523 ; AVX2-LABEL: 'var_ctlz_v16i32u'
524 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 68 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
525 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
527 ; AVX512F-LABEL: 'var_ctlz_v16i32u'
528 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
529 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
531 ; AVX512BW-LABEL: 'var_ctlz_v16i32u'
532 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 true)
533 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
535 ; AVX512CD-LABEL: 'var_ctlz_v16i32u'
536 ; 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)
537 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %ctlz
539   %ctlz = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %a, i1 1)
540   ret <16 x i32> %ctlz
543 define <8 x i16> @var_ctlz_v8i16(<8 x i16> %a) {
544 ; NOLZCNT-LABEL: 'var_ctlz_v8i16'
545 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
546 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
548 ; SSE2-LABEL: 'var_ctlz_v8i16'
549 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
550 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
552 ; SSE42-LABEL: 'var_ctlz_v8i16'
553 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
554 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
556 ; AVX1-LABEL: 'var_ctlz_v8i16'
557 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
558 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
560 ; AVX2-LABEL: 'var_ctlz_v8i16'
561 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
562 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
564 ; AVX512-LABEL: 'var_ctlz_v8i16'
565 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
566 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
568 ; AVX512CD-LABEL: 'var_ctlz_v8i16'
569 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false)
570 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
572   %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 0)
573   ret <8 x i16> %ctlz
576 define <8 x i16> @var_ctlz_v8i16u(<8 x i16> %a) {
577 ; NOLZCNT-LABEL: 'var_ctlz_v8i16u'
578 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
579 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
581 ; SSE2-LABEL: 'var_ctlz_v8i16u'
582 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 34 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
583 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
585 ; SSE42-LABEL: 'var_ctlz_v8i16u'
586 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
587 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
589 ; AVX1-LABEL: 'var_ctlz_v8i16u'
590 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
591 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
593 ; AVX2-LABEL: 'var_ctlz_v8i16u'
594 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
595 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
597 ; AVX512-LABEL: 'var_ctlz_v8i16u'
598 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
599 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
601 ; AVX512CD-LABEL: 'var_ctlz_v8i16u'
602 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 6 for instruction: %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 true)
603 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %ctlz
605   %ctlz = call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 1)
606   ret <8 x i16> %ctlz
609 define <16 x i16> @var_ctlz_v16i16(<16 x i16> %a) {
610 ; NOLZCNT-LABEL: 'var_ctlz_v16i16'
611 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 68 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
612 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
614 ; SSE2-LABEL: 'var_ctlz_v16i16'
615 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 68 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
616 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
618 ; SSE42-LABEL: 'var_ctlz_v16i16'
619 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
620 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
622 ; AVX1-LABEL: 'var_ctlz_v16i16'
623 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
624 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
626 ; AVX2-LABEL: 'var_ctlz_v16i16'
627 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
628 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
630 ; AVX512-LABEL: 'var_ctlz_v16i16'
631 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
632 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
634 ; AVX512CD-LABEL: 'var_ctlz_v16i16'
635 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 false)
636 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
638   %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 0)
639   ret <16 x i16> %ctlz
642 define <16 x i16> @var_ctlz_v16i16u(<16 x i16> %a) {
643 ; NOLZCNT-LABEL: 'var_ctlz_v16i16u'
644 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 68 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
645 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
647 ; SSE2-LABEL: 'var_ctlz_v16i16u'
648 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 68 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
649 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
651 ; SSE42-LABEL: 'var_ctlz_v16i16u'
652 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
653 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
655 ; AVX1-LABEL: 'var_ctlz_v16i16u'
656 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
657 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
659 ; AVX2-LABEL: 'var_ctlz_v16i16u'
660 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
661 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
663 ; AVX512-LABEL: 'var_ctlz_v16i16u'
664 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
665 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
667 ; AVX512CD-LABEL: 'var_ctlz_v16i16u'
668 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 true)
669 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %ctlz
671   %ctlz = call <16 x i16> @llvm.ctlz.v16i16(<16 x i16> %a, i1 1)
672   ret <16 x i16> %ctlz
675 define <32 x i16> @var_ctlz_v32i16(<32 x i16> %a) {
676 ; NOLZCNT-LABEL: 'var_ctlz_v32i16'
677 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 136 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
678 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
680 ; SSE2-LABEL: 'var_ctlz_v32i16'
681 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 136 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
682 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
684 ; SSE42-LABEL: 'var_ctlz_v32i16'
685 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 88 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
686 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
688 ; AVX1-LABEL: 'var_ctlz_v32i16'
689 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
690 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
692 ; AVX2-LABEL: 'var_ctlz_v32i16'
693 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
694 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
696 ; AVX512F-LABEL: 'var_ctlz_v32i16'
697 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 29 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
698 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
700 ; AVX512BW-LABEL: 'var_ctlz_v32i16'
701 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
702 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
704 ; AVX512CD-LABEL: 'var_ctlz_v32i16'
705 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
706 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
708   %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 0)
709   ret <32 x i16> %ctlz
712 define <32 x i16> @var_ctlz_v32i16u(<32 x i16> %a) {
713 ; NOLZCNT-LABEL: 'var_ctlz_v32i16u'
714 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 136 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
715 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
717 ; SSE2-LABEL: 'var_ctlz_v32i16u'
718 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 136 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
719 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
721 ; SSE42-LABEL: 'var_ctlz_v32i16u'
722 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 88 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
723 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
725 ; AVX1-LABEL: 'var_ctlz_v32i16u'
726 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
727 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
729 ; AVX2-LABEL: 'var_ctlz_v32i16u'
730 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
731 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
733 ; AVX512F-LABEL: 'var_ctlz_v32i16u'
734 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 29 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
735 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
737 ; AVX512BW-LABEL: 'var_ctlz_v32i16u'
738 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
739 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
741 ; AVX512CD-LABEL: 'var_ctlz_v32i16u'
742 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
743 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
745   %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 1)
746   ret <32 x i16> %ctlz
749 define <16 x i8> @var_ctlz_v16i8(<16 x i8> %a) {
750 ; NOLZCNT-LABEL: 'var_ctlz_v16i8'
751 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
752 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
754 ; SSE2-LABEL: 'var_ctlz_v16i8'
755 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
756 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
758 ; SSE42-LABEL: 'var_ctlz_v16i8'
759 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
760 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
762 ; AVX1-LABEL: 'var_ctlz_v16i8'
763 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
764 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
766 ; AVX2-LABEL: 'var_ctlz_v16i8'
767 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
768 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
770 ; AVX512-LABEL: 'var_ctlz_v16i8'
771 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
772 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
774 ; AVX512CD-LABEL: 'var_ctlz_v16i8'
775 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
776 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
778   %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 0)
779   ret <16 x i8> %ctlz
782 define <16 x i8> @var_ctlz_v16i8u(<16 x i8> %a) {
783 ; NOLZCNT-LABEL: 'var_ctlz_v16i8u'
784 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
785 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
787 ; SSE2-LABEL: 'var_ctlz_v16i8u'
788 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
789 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
791 ; SSE42-LABEL: 'var_ctlz_v16i8u'
792 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
793 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
795 ; AVX1-LABEL: 'var_ctlz_v16i8u'
796 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
797 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
799 ; AVX2-LABEL: 'var_ctlz_v16i8u'
800 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
801 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
803 ; AVX512-LABEL: 'var_ctlz_v16i8u'
804 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
805 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
807 ; AVX512CD-LABEL: 'var_ctlz_v16i8u'
808 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
809 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
811   %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 1)
812   ret <16 x i8> %ctlz
815 define <32 x i8> @var_ctlz_v32i8(<32 x i8> %a) {
816 ; NOLZCNT-LABEL: 'var_ctlz_v32i8'
817 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
818 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
820 ; SSE2-LABEL: 'var_ctlz_v32i8'
821 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
822 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
824 ; SSE42-LABEL: 'var_ctlz_v32i8'
825 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
826 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
828 ; AVX1-LABEL: 'var_ctlz_v32i8'
829 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
830 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
832 ; AVX2-LABEL: 'var_ctlz_v32i8'
833 ; AVX2-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)
834 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
836 ; AVX512-LABEL: 'var_ctlz_v32i8'
837 ; AVX512-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)
838 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
840 ; AVX512CD-LABEL: 'var_ctlz_v32i8'
841 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
842 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
844   %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 0)
845   ret <32 x i8> %ctlz
848 define <32 x i8> @var_ctlz_v32i8u(<32 x i8> %a) {
849 ; NOLZCNT-LABEL: 'var_ctlz_v32i8u'
850 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
851 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
853 ; SSE2-LABEL: 'var_ctlz_v32i8u'
854 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
855 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
857 ; SSE42-LABEL: 'var_ctlz_v32i8u'
858 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
859 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
861 ; AVX1-LABEL: 'var_ctlz_v32i8u'
862 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
863 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
865 ; AVX2-LABEL: 'var_ctlz_v32i8u'
866 ; AVX2-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)
867 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
869 ; AVX512-LABEL: 'var_ctlz_v32i8u'
870 ; AVX512-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)
871 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
873 ; AVX512CD-LABEL: 'var_ctlz_v32i8u'
874 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
875 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
877   %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 1)
878   ret <32 x i8> %ctlz
881 define <64 x i8> @var_ctlz_v64i8(<64 x i8> %a) {
882 ; NOLZCNT-LABEL: 'var_ctlz_v64i8'
883 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 128 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
884 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
886 ; SSE2-LABEL: 'var_ctlz_v64i8'
887 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 128 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
888 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
890 ; SSE42-LABEL: 'var_ctlz_v64i8'
891 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
892 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
894 ; AVX1-LABEL: 'var_ctlz_v64i8'
895 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 56 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
896 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
898 ; AVX2-LABEL: 'var_ctlz_v64i8'
899 ; AVX2-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)
900 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
902 ; AVX512F-LABEL: 'var_ctlz_v64i8'
903 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
904 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
906 ; AVX512BW-LABEL: 'var_ctlz_v64i8'
907 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
908 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
910 ; AVX512CD-LABEL: 'var_ctlz_v64i8'
911 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
912 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
914   %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 0)
915   ret <64 x i8> %ctlz
918 define <64 x i8> @var_ctlz_v64i8u(<64 x i8> %a) {
919 ; NOLZCNT-LABEL: 'var_ctlz_v64i8u'
920 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 128 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
921 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
923 ; SSE2-LABEL: 'var_ctlz_v64i8u'
924 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 128 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
925 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
927 ; SSE42-LABEL: 'var_ctlz_v64i8u'
928 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
929 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
931 ; AVX1-LABEL: 'var_ctlz_v64i8u'
932 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 56 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
933 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
935 ; AVX2-LABEL: 'var_ctlz_v64i8u'
936 ; AVX2-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)
937 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
939 ; AVX512F-LABEL: 'var_ctlz_v64i8u'
940 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
941 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
943 ; AVX512BW-LABEL: 'var_ctlz_v64i8u'
944 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
945 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
947 ; AVX512CD-LABEL: 'var_ctlz_v64i8u'
948 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
949 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
951   %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 1)
952   ret <64 x i8> %ctlz