Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / Analysis / CostModel / X86 / ctlz-latency.ll
blobc1996e915628485e4df48936603ac9b0cb3463d2
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=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=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=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=latency -mattr=+lzcnt,+avx | FileCheck %s -check-prefixes=CHECK,LZCNT,AVX,AVX1
6 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mattr=+lzcnt,+avx2 | FileCheck %s -check-prefixes=CHECK,LZCNT,AVX,AVX2
7 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=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=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=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 2 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 2 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 45 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 45 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 28 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 24 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 18 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 18 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 5 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 45 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 45 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 28 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 24 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 18 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 18 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 5 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 90 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 90 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 56 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 33 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 18 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 18 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 5 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 90 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 90 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 56 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 33 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 18 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 18 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 5 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 180 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 180 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 112 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 66 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 36 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 28 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 22 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 5 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 180 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 180 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 112 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 66 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 36 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 28 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 22 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 5 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 45 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 45 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 20 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 20 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 16 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 16 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 5 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 45 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 45 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 20 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 20 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 16 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 16 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 5 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 90 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 90 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 40 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 28 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 16 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 16 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 5 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 90 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 90 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 40 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 28 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 16 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 16 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 5 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 180 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 180 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 80 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 56 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 32 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 30 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 23 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 5 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 180 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 180 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 80 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 56 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 32 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 30 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 23 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 5 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 38 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 38 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 17 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 16 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 13 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 13 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 15 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 38 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 38 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 17 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 16 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 13 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 13 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 15 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 76 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 76 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 34 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 22 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 14 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 14 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 19 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 76 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 76 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 34 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 22 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 14 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 14 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 19 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 152 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 152 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 68 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 44 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 28 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 ; AVX512-LABEL: 'var_ctlz_v32i16'
697 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 false)
698 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
700 ; AVX512CD-LABEL: 'var_ctlz_v32i16'
701 ; 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)
702 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
704   %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 0)
705   ret <32 x i16> %ctlz
708 define <32 x i16> @var_ctlz_v32i16u(<32 x i16> %a) {
709 ; NOLZCNT-LABEL: 'var_ctlz_v32i16u'
710 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 152 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
711 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
713 ; SSE2-LABEL: 'var_ctlz_v32i16u'
714 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 152 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
715 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
717 ; SSE42-LABEL: 'var_ctlz_v32i16u'
718 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 68 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
719 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
721 ; AVX1-LABEL: 'var_ctlz_v32i16u'
722 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
723 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
725 ; AVX2-LABEL: 'var_ctlz_v32i16u'
726 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
727 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
729 ; AVX512-LABEL: 'var_ctlz_v32i16u'
730 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 true)
731 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
733 ; AVX512CD-LABEL: 'var_ctlz_v32i16u'
734 ; 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)
735 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %ctlz
737   %ctlz = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %a, i1 1)
738   ret <32 x i16> %ctlz
741 define <16 x i8> @var_ctlz_v16i8(<16 x i8> %a) {
742 ; NOLZCNT-LABEL: 'var_ctlz_v16i8'
743 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 39 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
744 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
746 ; SSE2-LABEL: 'var_ctlz_v16i8'
747 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 39 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
748 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
750 ; SSE42-LABEL: 'var_ctlz_v16i8'
751 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
752 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
754 ; AVX-LABEL: 'var_ctlz_v16i8'
755 ; AVX-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
756 ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
758 ; AVX512-LABEL: 'var_ctlz_v16i8'
759 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false)
760 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
762 ; AVX512CD-LABEL: 'var_ctlz_v16i8'
763 ; 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)
764 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
766   %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 0)
767   ret <16 x i8> %ctlz
770 define <16 x i8> @var_ctlz_v16i8u(<16 x i8> %a) {
771 ; NOLZCNT-LABEL: 'var_ctlz_v16i8u'
772 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 39 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
773 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
775 ; SSE2-LABEL: 'var_ctlz_v16i8u'
776 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 39 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
777 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
779 ; SSE42-LABEL: 'var_ctlz_v16i8u'
780 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
781 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
783 ; AVX-LABEL: 'var_ctlz_v16i8u'
784 ; AVX-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
785 ; AVX-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
787 ; AVX512-LABEL: 'var_ctlz_v16i8u'
788 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 true)
789 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
791 ; AVX512CD-LABEL: 'var_ctlz_v16i8u'
792 ; 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)
793 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %ctlz
795   %ctlz = call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 1)
796   ret <16 x i8> %ctlz
799 define <32 x i8> @var_ctlz_v32i8(<32 x i8> %a) {
800 ; NOLZCNT-LABEL: 'var_ctlz_v32i8'
801 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 78 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
802 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
804 ; SSE2-LABEL: 'var_ctlz_v32i8'
805 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 78 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
806 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
808 ; SSE42-LABEL: 'var_ctlz_v32i8'
809 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
810 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
812 ; AVX1-LABEL: 'var_ctlz_v32i8'
813 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
814 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
816 ; AVX2-LABEL: 'var_ctlz_v32i8'
817 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
818 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
820 ; AVX512-LABEL: 'var_ctlz_v32i8'
821 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
822 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
824 ; AVX512CD-LABEL: 'var_ctlz_v32i8'
825 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 false)
826 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
828   %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 0)
829   ret <32 x i8> %ctlz
832 define <32 x i8> @var_ctlz_v32i8u(<32 x i8> %a) {
833 ; NOLZCNT-LABEL: 'var_ctlz_v32i8u'
834 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 78 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
835 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
837 ; SSE2-LABEL: 'var_ctlz_v32i8u'
838 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 78 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
839 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
841 ; SSE42-LABEL: 'var_ctlz_v32i8u'
842 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
843 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
845 ; AVX1-LABEL: 'var_ctlz_v32i8u'
846 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
847 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
849 ; AVX2-LABEL: 'var_ctlz_v32i8u'
850 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
851 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
853 ; AVX512-LABEL: 'var_ctlz_v32i8u'
854 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
855 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
857 ; AVX512CD-LABEL: 'var_ctlz_v32i8u'
858 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 true)
859 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %ctlz
861   %ctlz = call <32 x i8> @llvm.ctlz.v32i8(<32 x i8> %a, i1 1)
862   ret <32 x i8> %ctlz
865 define <64 x i8> @var_ctlz_v64i8(<64 x i8> %a) {
866 ; NOLZCNT-LABEL: 'var_ctlz_v64i8'
867 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 156 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
868 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
870 ; SSE2-LABEL: 'var_ctlz_v64i8'
871 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 156 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
872 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
874 ; SSE42-LABEL: 'var_ctlz_v64i8'
875 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 60 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
876 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
878 ; AVX1-LABEL: 'var_ctlz_v64i8'
879 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
880 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
882 ; AVX2-LABEL: 'var_ctlz_v64i8'
883 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
884 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
886 ; AVX512F-LABEL: 'var_ctlz_v64i8'
887 ; AVX512F-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)
888 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
890 ; AVX512BW-LABEL: 'var_ctlz_v64i8'
891 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
892 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
894 ; AVX512CD-LABEL: 'var_ctlz_v64i8'
895 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 false)
896 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
898   %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 0)
899   ret <64 x i8> %ctlz
902 define <64 x i8> @var_ctlz_v64i8u(<64 x i8> %a) {
903 ; NOLZCNT-LABEL: 'var_ctlz_v64i8u'
904 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 156 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
905 ; NOLZCNT-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
907 ; SSE2-LABEL: 'var_ctlz_v64i8u'
908 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 156 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
909 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
911 ; SSE42-LABEL: 'var_ctlz_v64i8u'
912 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 60 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
913 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
915 ; AVX1-LABEL: 'var_ctlz_v64i8u'
916 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
917 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
919 ; AVX2-LABEL: 'var_ctlz_v64i8u'
920 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
921 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
923 ; AVX512F-LABEL: 'var_ctlz_v64i8u'
924 ; AVX512F-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)
925 ; AVX512F-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
927 ; AVX512BW-LABEL: 'var_ctlz_v64i8u'
928 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
929 ; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
931 ; AVX512CD-LABEL: 'var_ctlz_v64i8u'
932 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 true)
933 ; AVX512CD-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %ctlz
935   %ctlz = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %a, i1 1)
936   ret <64 x i8> %ctlz