Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Analysis / CostModel / X86 / cttz-latency.ll
bloba8abba56ba49fc0d0a209428d18ec60c32729fc6
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=-bmi,+sse2 | FileCheck %s -check-prefixes=CHECK,SSE2,NOBMI
3 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mattr=+bmi,+sse2 | FileCheck %s -check-prefixes=CHECK,SSE2,BMI
4 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mattr=+bmi,+sse4.2 | FileCheck %s -check-prefixes=CHECK,BMI,SSE42
5 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mattr=+bmi,+avx | FileCheck %s -check-prefixes=CHECK,BMI,AVX1
6 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mattr=+bmi,+avx2 | FileCheck %s -check-prefixes=CHECK,BMI,AVX2
7 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mattr=+bmi,+avx512f | FileCheck %s -check-prefixes=CHECK,BMI,AVX512
8 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mattr=+bmi,+avx512vl,+avx512bw,+avx512dq | FileCheck %s -check-prefixes=CHECK,BMI,AVX512
9 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mattr=+bmi,+avx512vl,+avx512vpopcntdq | FileCheck %s -check-prefixes=CHECK,BMI,AVX512
10 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=latency -mattr=+bmi,+avx512vl,+avx512bitalg | FileCheck %s -check-prefixes=CHECK,BMI,AVX512
12 ; Verify the cost of scalar trailing zero count instructions.
14 declare i64 @llvm.cttz.i64(i64, i1)
15 declare i32 @llvm.cttz.i32(i32, i1)
16 declare i16 @llvm.cttz.i16(i16, i1)
17 declare  i8 @llvm.cttz.i8(i8, i1)
19 define i64 @var_cttz_i64(i64 %a) {
20 ; NOBMI-LABEL: 'var_cttz_i64'
21 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %cttz = call i64 @llvm.cttz.i64(i64 %a, i1 false)
22 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i64 %cttz
24 ; BMI-LABEL: 'var_cttz_i64'
25 ; BMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i64 @llvm.cttz.i64(i64 %a, i1 false)
26 ; BMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i64 %cttz
28   %cttz = call i64 @llvm.cttz.i64(i64 %a, i1 0)
29   ret i64 %cttz
32 define i64 @var_cttz_i64u(i64 %a) {
33 ; CHECK-LABEL: 'var_cttz_i64u'
34 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i64 @llvm.cttz.i64(i64 %a, i1 true)
35 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i64 %cttz
37   %cttz = call i64 @llvm.cttz.i64(i64 %a, i1 1)
38   ret i64 %cttz
41 define i32 @var_cttz_i32(i32 %a) {
42 ; NOBMI-LABEL: 'var_cttz_i32'
43 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %cttz = call i32 @llvm.cttz.i32(i32 %a, i1 false)
44 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 %cttz
46 ; BMI-LABEL: 'var_cttz_i32'
47 ; BMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i32 @llvm.cttz.i32(i32 %a, i1 false)
48 ; BMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 %cttz
50   %cttz = call i32 @llvm.cttz.i32(i32 %a, i1 0)
51   ret i32 %cttz
54 define i32 @var_cttz_i32u(i32 %a) {
55 ; CHECK-LABEL: 'var_cttz_i32u'
56 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i32 @llvm.cttz.i32(i32 %a, i1 true)
57 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i32 %cttz
59   %cttz = call i32 @llvm.cttz.i32(i32 %a, i1 1)
60   ret i32 %cttz
63 define i16 @var_cttz_i16(i16 %a) {
64 ; CHECK-LABEL: 'var_cttz_i16'
65 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i16 @llvm.cttz.i16(i16 %a, i1 false)
66 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i16 %cttz
68   %cttz = call i16 @llvm.cttz.i16(i16 %a, i1 0)
69   ret i16 %cttz
72 define i16 @var_cttz_i16u(i16 %a) {
73 ; NOBMI-LABEL: 'var_cttz_i16u'
74 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %cttz = call i16 @llvm.cttz.i16(i16 %a, i1 true)
75 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i16 %cttz
77 ; BMI-LABEL: 'var_cttz_i16u'
78 ; BMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i16 @llvm.cttz.i16(i16 %a, i1 true)
79 ; BMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i16 %cttz
81   %cttz = call i16 @llvm.cttz.i16(i16 %a, i1 1)
82   ret i16 %cttz
85 define i8 @var_cttz_i8(i8 %a) {
86 ; CHECK-LABEL: 'var_cttz_i8'
87 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 false)
88 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i8 %cttz
90   %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 0)
91   ret i8 %cttz
94 define i8 @var_cttz_i8u(i8 %a) {
95 ; NOBMI-LABEL: 'var_cttz_i8u'
96 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 2 for instruction: %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 true)
97 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i8 %cttz
99 ; BMI-LABEL: 'var_cttz_i8u'
100 ; BMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 true)
101 ; BMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i8 %cttz
103   %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 1)
104   ret i8 %cttz
107 ; Verify the cost of vector trailing zero count instructions.
109 declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1)
110 declare <4 x i32> @llvm.cttz.v4i32(<4 x i32>, i1)
111 declare <8 x i16> @llvm.cttz.v8i16(<8 x i16>, i1)
112 declare <16 x i8> @llvm.cttz.v16i8(<16 x i8>, i1)
114 declare <4 x i64> @llvm.cttz.v4i64(<4 x i64>, i1)
115 declare <8 x i32> @llvm.cttz.v8i32(<8 x i32>, i1)
116 declare <16 x i16> @llvm.cttz.v16i16(<16 x i16>, i1)
117 declare <32 x i8> @llvm.cttz.v32i8(<32 x i8>, i1)
119 declare <8 x i64> @llvm.cttz.v8i64(<8 x i64>, i1)
120 declare <16 x i32> @llvm.cttz.v16i32(<16 x i32>, i1)
121 declare <32 x i16> @llvm.cttz.v32i16(<32 x i16>, i1)
122 declare <64 x i8> @llvm.cttz.v64i8(<64 x i8>, i1)
124 define <2 x i64> @var_cttz_v2i64(<2 x i64> %a) {
125 ; SSE2-LABEL: 'var_cttz_v2i64'
126 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
127 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
129 ; SSE42-LABEL: 'var_cttz_v2i64'
130 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
131 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
133 ; AVX1-LABEL: 'var_cttz_v2i64'
134 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
135 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
137 ; AVX2-LABEL: 'var_cttz_v2i64'
138 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
139 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
141 ; AVX512-LABEL: 'var_cttz_v2i64'
142 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
143 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
145   %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 0)
146   ret <2 x i64> %cttz
149 define <2 x i64> @var_cttz_v2i64u(<2 x i64> %a) {
150 ; SSE2-LABEL: 'var_cttz_v2i64u'
151 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true)
152 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
154 ; SSE42-LABEL: 'var_cttz_v2i64u'
155 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true)
156 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
158 ; AVX1-LABEL: 'var_cttz_v2i64u'
159 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true)
160 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
162 ; AVX2-LABEL: 'var_cttz_v2i64u'
163 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true)
164 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
166 ; AVX512-LABEL: 'var_cttz_v2i64u'
167 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true)
168 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
170   %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 1)
171   ret <2 x i64> %cttz
174 define <4 x i64> @var_cttz_v4i64(<4 x i64> %a) {
175 ; SSE2-LABEL: 'var_cttz_v4i64'
176 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 56 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
177 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
179 ; SSE42-LABEL: 'var_cttz_v4i64'
180 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 50 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
181 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
183 ; AVX1-LABEL: 'var_cttz_v4i64'
184 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
185 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
187 ; AVX2-LABEL: 'var_cttz_v4i64'
188 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
189 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
191 ; AVX512-LABEL: 'var_cttz_v4i64'
192 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
193 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
195   %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 0)
196   ret <4 x i64> %cttz
199 define <4 x i64> @var_cttz_v4i64u(<4 x i64> %a) {
200 ; SSE2-LABEL: 'var_cttz_v4i64u'
201 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 56 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
202 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
204 ; SSE42-LABEL: 'var_cttz_v4i64u'
205 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 50 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
206 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
208 ; AVX1-LABEL: 'var_cttz_v4i64u'
209 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
210 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
212 ; AVX2-LABEL: 'var_cttz_v4i64u'
213 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
214 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
216 ; AVX512-LABEL: 'var_cttz_v4i64u'
217 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
218 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
220   %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 1)
221   ret <4 x i64> %cttz
224 define <8 x i64> @var_cttz_v8i64(<8 x i64> %a) {
225 ; SSE2-LABEL: 'var_cttz_v8i64'
226 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 112 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
227 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
229 ; SSE42-LABEL: 'var_cttz_v8i64'
230 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 100 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
231 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
233 ; AVX1-LABEL: 'var_cttz_v8i64'
234 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
235 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
237 ; AVX2-LABEL: 'var_cttz_v8i64'
238 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
239 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
241 ; AVX512-LABEL: 'var_cttz_v8i64'
242 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
243 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
245   %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 0)
246   ret <8 x i64> %cttz
249 define <8 x i64> @var_cttz_v8i64u(<8 x i64> %a) {
250 ; SSE2-LABEL: 'var_cttz_v8i64u'
251 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 112 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
252 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
254 ; SSE42-LABEL: 'var_cttz_v8i64u'
255 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 100 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
256 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
258 ; AVX1-LABEL: 'var_cttz_v8i64u'
259 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
260 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
262 ; AVX2-LABEL: 'var_cttz_v8i64u'
263 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
264 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
266 ; AVX512-LABEL: 'var_cttz_v8i64u'
267 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
268 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
270   %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 1)
271   ret <8 x i64> %cttz
274 define <4 x i32> @var_cttz_v4i32(<4 x i32> %a) {
275 ; SSE2-LABEL: 'var_cttz_v4i32'
276 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 31 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false)
277 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
279 ; SSE42-LABEL: 'var_cttz_v4i32'
280 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false)
281 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
283 ; AVX1-LABEL: 'var_cttz_v4i32'
284 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false)
285 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
287 ; AVX2-LABEL: 'var_cttz_v4i32'
288 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false)
289 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
291 ; AVX512-LABEL: 'var_cttz_v4i32'
292 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false)
293 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
295   %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 0)
296   ret <4 x i32> %cttz
299 define <4 x i32> @var_cttz_v4i32u(<4 x i32> %a) {
300 ; SSE2-LABEL: 'var_cttz_v4i32u'
301 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 31 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 true)
302 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
304 ; SSE42-LABEL: 'var_cttz_v4i32u'
305 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 true)
306 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
308 ; AVX1-LABEL: 'var_cttz_v4i32u'
309 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 true)
310 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
312 ; AVX2-LABEL: 'var_cttz_v4i32u'
313 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 true)
314 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
316 ; AVX512-LABEL: 'var_cttz_v4i32u'
317 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 true)
318 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
320   %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 1)
321   ret <4 x i32> %cttz
324 define <8 x i32> @var_cttz_v8i32(<8 x i32> %a) {
325 ; SSE2-LABEL: 'var_cttz_v8i32'
326 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 62 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
327 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
329 ; SSE42-LABEL: 'var_cttz_v8i32'
330 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 52 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
331 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
333 ; AVX1-LABEL: 'var_cttz_v8i32'
334 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
335 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
337 ; AVX2-LABEL: 'var_cttz_v8i32'
338 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
339 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
341 ; AVX512-LABEL: 'var_cttz_v8i32'
342 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
343 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
345   %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 0)
346   ret <8 x i32> %cttz
349 define <8 x i32> @var_cttz_v8i32u(<8 x i32> %a) {
350 ; SSE2-LABEL: 'var_cttz_v8i32u'
351 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 62 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
352 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
354 ; SSE42-LABEL: 'var_cttz_v8i32u'
355 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 52 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
356 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
358 ; AVX1-LABEL: 'var_cttz_v8i32u'
359 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
360 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
362 ; AVX2-LABEL: 'var_cttz_v8i32u'
363 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
364 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
366 ; AVX512-LABEL: 'var_cttz_v8i32u'
367 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
368 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
370   %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 1)
371   ret <8 x i32> %cttz
374 define <16 x i32> @var_cttz_v16i32(<16 x i32> %a) {
375 ; SSE2-LABEL: 'var_cttz_v16i32'
376 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 124 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
377 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
379 ; SSE42-LABEL: 'var_cttz_v16i32'
380 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 104 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
381 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
383 ; AVX1-LABEL: 'var_cttz_v16i32'
384 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 54 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
385 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
387 ; AVX2-LABEL: 'var_cttz_v16i32'
388 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
389 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
391 ; AVX512-LABEL: 'var_cttz_v16i32'
392 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
393 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
395   %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 0)
396   ret <16 x i32> %cttz
399 define <16 x i32> @var_cttz_v16i32u(<16 x i32> %a) {
400 ; SSE2-LABEL: 'var_cttz_v16i32u'
401 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 124 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
402 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
404 ; SSE42-LABEL: 'var_cttz_v16i32u'
405 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 104 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
406 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
408 ; AVX1-LABEL: 'var_cttz_v16i32u'
409 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 54 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
410 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
412 ; AVX2-LABEL: 'var_cttz_v16i32u'
413 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
414 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
416 ; AVX512-LABEL: 'var_cttz_v16i32u'
417 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 8 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
418 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
420   %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 1)
421   ret <16 x i32> %cttz
424 define <8 x i16> @var_cttz_v8i16(<8 x i16> %a) {
425 ; SSE2-LABEL: 'var_cttz_v8i16'
426 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
427 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
429 ; SSE42-LABEL: 'var_cttz_v8i16'
430 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
431 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
433 ; AVX1-LABEL: 'var_cttz_v8i16'
434 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
435 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
437 ; AVX2-LABEL: 'var_cttz_v8i16'
438 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
439 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
441 ; AVX512-LABEL: 'var_cttz_v8i16'
442 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
443 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
445   %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 0)
446   ret <8 x i16> %cttz
449 define <8 x i16> @var_cttz_v8i16u(<8 x i16> %a) {
450 ; SSE2-LABEL: 'var_cttz_v8i16u'
451 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 27 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
452 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
454 ; SSE42-LABEL: 'var_cttz_v8i16u'
455 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
456 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
458 ; AVX1-LABEL: 'var_cttz_v8i16u'
459 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
460 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
462 ; AVX2-LABEL: 'var_cttz_v8i16u'
463 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
464 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
466 ; AVX512-LABEL: 'var_cttz_v8i16u'
467 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
468 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
470   %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 1)
471   ret <8 x i16> %cttz
474 define <16 x i16> @var_cttz_v16i16(<16 x i16> %a) {
475 ; SSE2-LABEL: 'var_cttz_v16i16'
476 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 54 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
477 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
479 ; SSE42-LABEL: 'var_cttz_v16i16'
480 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
481 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
483 ; AVX1-LABEL: 'var_cttz_v16i16'
484 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
485 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
487 ; AVX2-LABEL: 'var_cttz_v16i16'
488 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
489 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
491 ; AVX512-LABEL: 'var_cttz_v16i16'
492 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
493 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
495   %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 0)
496   ret <16 x i16> %cttz
499 define <16 x i16> @var_cttz_v16i16u(<16 x i16> %a) {
500 ; SSE2-LABEL: 'var_cttz_v16i16u'
501 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 54 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
502 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
504 ; SSE42-LABEL: 'var_cttz_v16i16u'
505 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
506 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
508 ; AVX1-LABEL: 'var_cttz_v16i16u'
509 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
510 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
512 ; AVX2-LABEL: 'var_cttz_v16i16u'
513 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
514 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
516 ; AVX512-LABEL: 'var_cttz_v16i16u'
517 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
518 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
520   %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 1)
521   ret <16 x i16> %cttz
524 define <32 x i16> @var_cttz_v32i16(<32 x i16> %a) {
525 ; SSE2-LABEL: 'var_cttz_v32i16'
526 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 108 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
527 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
529 ; SSE42-LABEL: 'var_cttz_v32i16'
530 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
531 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
533 ; AVX1-LABEL: 'var_cttz_v32i16'
534 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
535 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
537 ; AVX2-LABEL: 'var_cttz_v32i16'
538 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
539 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
541   %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 0)
542   ret <32 x i16> %cttz
545 define <32 x i16> @var_cttz_v32i16u(<32 x i16> %a) {
546 ; SSE2-LABEL: 'var_cttz_v32i16u'
547 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 108 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
548 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
550 ; SSE42-LABEL: 'var_cttz_v32i16u'
551 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 80 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
552 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
554 ; AVX1-LABEL: 'var_cttz_v32i16u'
555 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
556 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
558 ; AVX2-LABEL: 'var_cttz_v32i16u'
559 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
560 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
562   %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 1)
563   ret <32 x i16> %cttz
566 define <16 x i8> @var_cttz_v16i8(<16 x i8> %a) {
567 ; SSE2-LABEL: 'var_cttz_v16i8'
568 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
569 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
571 ; SSE42-LABEL: 'var_cttz_v16i8'
572 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
573 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
575 ; AVX1-LABEL: 'var_cttz_v16i8'
576 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
577 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
579 ; AVX2-LABEL: 'var_cttz_v16i8'
580 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
581 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
583   %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 0)
584   ret <16 x i8> %cttz
587 define <16 x i8> @var_cttz_v16i8u(<16 x i8> %a) {
588 ; SSE2-LABEL: 'var_cttz_v16i8u'
589 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
590 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
592 ; SSE42-LABEL: 'var_cttz_v16i8u'
593 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
594 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
596 ; AVX1-LABEL: 'var_cttz_v16i8u'
597 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
598 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
600 ; AVX2-LABEL: 'var_cttz_v16i8u'
601 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
602 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
604   %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 1)
605   ret <16 x i8> %cttz
608 define <32 x i8> @var_cttz_v32i8(<32 x i8> %a) {
609 ; SSE2-LABEL: 'var_cttz_v32i8'
610 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
611 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
613 ; SSE42-LABEL: 'var_cttz_v32i8'
614 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
615 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
617 ; AVX1-LABEL: 'var_cttz_v32i8'
618 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
619 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
621 ; AVX2-LABEL: 'var_cttz_v32i8'
622 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
623 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
625   %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 0)
626   ret <32 x i8> %cttz
629 define <32 x i8> @var_cttz_v32i8u(<32 x i8> %a) {
630 ; SSE2-LABEL: 'var_cttz_v32i8u'
631 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 true)
632 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
634 ; SSE42-LABEL: 'var_cttz_v32i8u'
635 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 true)
636 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
638 ; AVX1-LABEL: 'var_cttz_v32i8u'
639 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 true)
640 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
642 ; AVX2-LABEL: 'var_cttz_v32i8u'
643 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 true)
644 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
646   %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 1)
647   ret <32 x i8> %cttz
650 define <64 x i8> @var_cttz_v64i8(<64 x i8> %a) {
651 ; SSE2-LABEL: 'var_cttz_v64i8'
652 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 92 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
653 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
655 ; SSE42-LABEL: 'var_cttz_v64i8'
656 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
657 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
659 ; AVX1-LABEL: 'var_cttz_v64i8'
660 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
661 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
663 ; AVX2-LABEL: 'var_cttz_v64i8'
664 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
665 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
667   %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 0)
668   ret <64 x i8> %cttz
671 define <64 x i8> @var_cttz_v64i8u(<64 x i8> %a) {
672 ; SSE2-LABEL: 'var_cttz_v64i8u'
673 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 92 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
674 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
676 ; SSE42-LABEL: 'var_cttz_v64i8u'
677 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
678 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
680 ; AVX1-LABEL: 'var_cttz_v64i8u'
681 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
682 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
684 ; AVX2-LABEL: 'var_cttz_v64i8u'
685 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
686 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
688   %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 1)
689   ret <64 x i8> %cttz