Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / Analysis / CostModel / X86 / cttz-sizelatency.ll
blob294f101f571bf28b385763d850f26508636336cb
1 ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mattr=-bmi,+sse2 | FileCheck %s -check-prefixes=CHECK,NOBMI
3 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-latency -mattr=+bmi,+sse2 | FileCheck %s -check-prefixes=CHECK,BMI,SSE2
4 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -passes="print<cost-model>" 2>&1 -disable-output -cost-kind=size-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=size-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=size-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=size-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=size-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=size-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=size-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 ; CHECK-LABEL: 'var_cttz_i16u'
74 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i16 @llvm.cttz.i16(i16 %a, i1 true)
75 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i16 %cttz
77   %cttz = call i16 @llvm.cttz.i16(i16 %a, i1 1)
78   ret i16 %cttz
81 define i8 @var_cttz_i8(i8 %a) {
82 ; CHECK-LABEL: 'var_cttz_i8'
83 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 false)
84 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i8 %cttz
86   %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 0)
87   ret i8 %cttz
90 define i8 @var_cttz_i8u(i8 %a) {
91 ; CHECK-LABEL: 'var_cttz_i8u'
92 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 true)
93 ; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret i8 %cttz
95   %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 1)
96   ret i8 %cttz
99 ; Verify the cost of vector trailing zero count instructions.
101 declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1)
102 declare <4 x i32> @llvm.cttz.v4i32(<4 x i32>, i1)
103 declare <8 x i16> @llvm.cttz.v8i16(<8 x i16>, i1)
104 declare <16 x i8> @llvm.cttz.v16i8(<16 x i8>, i1)
106 declare <4 x i64> @llvm.cttz.v4i64(<4 x i64>, i1)
107 declare <8 x i32> @llvm.cttz.v8i32(<8 x i32>, i1)
108 declare <16 x i16> @llvm.cttz.v16i16(<16 x i16>, i1)
109 declare <32 x i8> @llvm.cttz.v32i8(<32 x i8>, i1)
111 declare <8 x i64> @llvm.cttz.v8i64(<8 x i64>, i1)
112 declare <16 x i32> @llvm.cttz.v16i32(<16 x i32>, i1)
113 declare <32 x i16> @llvm.cttz.v32i16(<32 x i16>, i1)
114 declare <64 x i8> @llvm.cttz.v64i8(<64 x i8>, i1)
116 define <2 x i64> @var_cttz_v2i64(<2 x i64> %a) {
117 ; NOBMI-LABEL: 'var_cttz_v2i64'
118 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
119 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
121 ; SSE2-LABEL: 'var_cttz_v2i64'
122 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
123 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
125 ; SSE42-LABEL: 'var_cttz_v2i64'
126 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 22 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
127 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
129 ; AVX1-LABEL: 'var_cttz_v2i64'
130 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
131 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
133 ; AVX2-LABEL: 'var_cttz_v2i64'
134 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
135 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
137 ; AVX512-LABEL: 'var_cttz_v2i64'
138 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
139 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
141   %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 0)
142   ret <2 x i64> %cttz
145 define <2 x i64> @var_cttz_v2i64u(<2 x i64> %a) {
146 ; NOBMI-LABEL: 'var_cttz_v2i64u'
147 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true)
148 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <2 x i64> %cttz
150 ; SSE2-LABEL: 'var_cttz_v2i64u'
151 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 21 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 22 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 17 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 13 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 13 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 ; NOBMI-LABEL: 'var_cttz_v4i64'
176 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 42 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
177 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
179 ; SSE2-LABEL: 'var_cttz_v4i64'
180 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 42 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
181 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
183 ; SSE42-LABEL: 'var_cttz_v4i64'
184 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
185 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
187 ; AVX1-LABEL: 'var_cttz_v4i64'
188 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 33 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
189 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
191 ; AVX2-LABEL: 'var_cttz_v4i64'
192 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
193 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
195 ; AVX512-LABEL: 'var_cttz_v4i64'
196 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
197 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
199   %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 0)
200   ret <4 x i64> %cttz
203 define <4 x i64> @var_cttz_v4i64u(<4 x i64> %a) {
204 ; NOBMI-LABEL: 'var_cttz_v4i64u'
205 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 42 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
206 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
208 ; SSE2-LABEL: 'var_cttz_v4i64u'
209 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 42 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
210 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
212 ; SSE42-LABEL: 'var_cttz_v4i64u'
213 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 44 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
214 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
216 ; AVX1-LABEL: 'var_cttz_v4i64u'
217 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 33 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
218 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
220 ; AVX2-LABEL: 'var_cttz_v4i64u'
221 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
222 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
224 ; AVX512-LABEL: 'var_cttz_v4i64u'
225 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
226 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i64> %cttz
228   %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 1)
229   ret <4 x i64> %cttz
232 define <8 x i64> @var_cttz_v8i64(<8 x i64> %a) {
233 ; NOBMI-LABEL: 'var_cttz_v8i64'
234 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 84 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
235 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
237 ; SSE2-LABEL: 'var_cttz_v8i64'
238 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 84 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
239 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
241 ; SSE42-LABEL: 'var_cttz_v8i64'
242 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 88 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
243 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
245 ; AVX1-LABEL: 'var_cttz_v8i64'
246 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 66 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
247 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
249 ; AVX2-LABEL: 'var_cttz_v8i64'
250 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
251 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
253 ; AVX512-LABEL: 'var_cttz_v8i64'
254 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
255 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
257   %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 0)
258   ret <8 x i64> %cttz
261 define <8 x i64> @var_cttz_v8i64u(<8 x i64> %a) {
262 ; NOBMI-LABEL: 'var_cttz_v8i64u'
263 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 84 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
264 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
266 ; SSE2-LABEL: 'var_cttz_v8i64u'
267 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 84 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
268 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
270 ; SSE42-LABEL: 'var_cttz_v8i64u'
271 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 88 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
272 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
274 ; AVX1-LABEL: 'var_cttz_v8i64u'
275 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 66 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
276 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
278 ; AVX2-LABEL: 'var_cttz_v8i64u'
279 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
280 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
282 ; AVX512-LABEL: 'var_cttz_v8i64u'
283 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
284 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i64> %cttz
286   %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 1)
287   ret <8 x i64> %cttz
290 define <4 x i32> @var_cttz_v4i32(<4 x i32> %a) {
291 ; NOBMI-LABEL: 'var_cttz_v4i32'
292 ; NOBMI-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)
293 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
295 ; SSE2-LABEL: 'var_cttz_v4i32'
296 ; SSE2-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)
297 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
299 ; SSE42-LABEL: 'var_cttz_v4i32'
300 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false)
301 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
303 ; AVX1-LABEL: 'var_cttz_v4i32'
304 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false)
305 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
307 ; AVX2-LABEL: 'var_cttz_v4i32'
308 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false)
309 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
311 ; AVX512-LABEL: 'var_cttz_v4i32'
312 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false)
313 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
315   %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 0)
316   ret <4 x i32> %cttz
319 define <4 x i32> @var_cttz_v4i32u(<4 x i32> %a) {
320 ; NOBMI-LABEL: 'var_cttz_v4i32u'
321 ; NOBMI-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)
322 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
324 ; SSE2-LABEL: 'var_cttz_v4i32u'
325 ; SSE2-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)
326 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
328 ; SSE42-LABEL: 'var_cttz_v4i32u'
329 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 25 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 true)
330 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
332 ; AVX1-LABEL: 'var_cttz_v4i32u'
333 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 21 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 true)
334 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
336 ; AVX2-LABEL: 'var_cttz_v4i32u'
337 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 true)
338 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
340 ; AVX512-LABEL: 'var_cttz_v4i32u'
341 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 17 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 true)
342 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <4 x i32> %cttz
344   %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 1)
345   ret <4 x i32> %cttz
348 define <8 x i32> @var_cttz_v8i32(<8 x i32> %a) {
349 ; NOBMI-LABEL: 'var_cttz_v8i32'
350 ; NOBMI-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)
351 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
353 ; SSE2-LABEL: 'var_cttz_v8i32'
354 ; SSE2-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)
355 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
357 ; SSE42-LABEL: 'var_cttz_v8i32'
358 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 50 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
359 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
361 ; AVX1-LABEL: 'var_cttz_v8i32'
362 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 41 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
363 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
365 ; AVX2-LABEL: 'var_cttz_v8i32'
366 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
367 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
369 ; AVX512-LABEL: 'var_cttz_v8i32'
370 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
371 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
373   %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 0)
374   ret <8 x i32> %cttz
377 define <8 x i32> @var_cttz_v8i32u(<8 x i32> %a) {
378 ; NOBMI-LABEL: 'var_cttz_v8i32u'
379 ; NOBMI-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)
380 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
382 ; SSE2-LABEL: 'var_cttz_v8i32u'
383 ; SSE2-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)
384 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
386 ; SSE42-LABEL: 'var_cttz_v8i32u'
387 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 50 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
388 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
390 ; AVX1-LABEL: 'var_cttz_v8i32u'
391 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 41 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
392 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
394 ; AVX2-LABEL: 'var_cttz_v8i32u'
395 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
396 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
398 ; AVX512-LABEL: 'var_cttz_v8i32u'
399 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
400 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i32> %cttz
402   %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 1)
403   ret <8 x i32> %cttz
406 define <16 x i32> @var_cttz_v16i32(<16 x i32> %a) {
407 ; NOBMI-LABEL: 'var_cttz_v16i32'
408 ; NOBMI-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)
409 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
411 ; SSE2-LABEL: 'var_cttz_v16i32'
412 ; SSE2-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)
413 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
415 ; SSE42-LABEL: 'var_cttz_v16i32'
416 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 100 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
417 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
419 ; AVX1-LABEL: 'var_cttz_v16i32'
420 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 82 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
421 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
423 ; AVX2-LABEL: 'var_cttz_v16i32'
424 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
425 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
427 ; AVX512-LABEL: 'var_cttz_v16i32'
428 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
429 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
431   %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 0)
432   ret <16 x i32> %cttz
435 define <16 x i32> @var_cttz_v16i32u(<16 x i32> %a) {
436 ; NOBMI-LABEL: 'var_cttz_v16i32u'
437 ; NOBMI-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)
438 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
440 ; SSE2-LABEL: 'var_cttz_v16i32u'
441 ; SSE2-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)
442 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
444 ; SSE42-LABEL: 'var_cttz_v16i32u'
445 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 100 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
446 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
448 ; AVX1-LABEL: 'var_cttz_v16i32u'
449 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 82 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
450 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
452 ; AVX2-LABEL: 'var_cttz_v16i32u'
453 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 48 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
454 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
456 ; AVX512-LABEL: 'var_cttz_v16i32u'
457 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 7 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
458 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i32> %cttz
460   %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 1)
461   ret <16 x i32> %cttz
464 define <8 x i16> @var_cttz_v8i16(<8 x i16> %a) {
465 ; NOBMI-LABEL: 'var_cttz_v8i16'
466 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
467 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
469 ; SSE2-LABEL: 'var_cttz_v8i16'
470 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
471 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
473 ; SSE42-LABEL: 'var_cttz_v8i16'
474 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
475 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
477 ; AVX1-LABEL: 'var_cttz_v8i16'
478 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
479 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
481 ; AVX2-LABEL: 'var_cttz_v8i16'
482 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
483 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
485 ; AVX512-LABEL: 'var_cttz_v8i16'
486 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
487 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
489   %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 0)
490   ret <8 x i16> %cttz
493 define <8 x i16> @var_cttz_v8i16u(<8 x i16> %a) {
494 ; NOBMI-LABEL: 'var_cttz_v8i16u'
495 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
496 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
498 ; SSE2-LABEL: 'var_cttz_v8i16u'
499 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
500 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
502 ; SSE42-LABEL: 'var_cttz_v8i16u'
503 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 23 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
504 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
506 ; AVX1-LABEL: 'var_cttz_v8i16u'
507 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
508 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
510 ; AVX2-LABEL: 'var_cttz_v8i16u'
511 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
512 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
514 ; AVX512-LABEL: 'var_cttz_v8i16u'
515 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
516 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <8 x i16> %cttz
518   %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 1)
519   ret <8 x i16> %cttz
522 define <16 x i16> @var_cttz_v16i16(<16 x i16> %a) {
523 ; NOBMI-LABEL: 'var_cttz_v16i16'
524 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
525 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
527 ; SSE2-LABEL: 'var_cttz_v16i16'
528 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
529 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
531 ; SSE42-LABEL: 'var_cttz_v16i16'
532 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
533 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
535 ; AVX1-LABEL: 'var_cttz_v16i16'
536 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
537 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
539 ; AVX2-LABEL: 'var_cttz_v16i16'
540 ; AVX2-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)
541 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
543   %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 0)
544   ret <16 x i16> %cttz
547 define <16 x i16> @var_cttz_v16i16u(<16 x i16> %a) {
548 ; NOBMI-LABEL: 'var_cttz_v16i16u'
549 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
550 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
552 ; SSE2-LABEL: 'var_cttz_v16i16u'
553 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
554 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
556 ; SSE42-LABEL: 'var_cttz_v16i16u'
557 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 46 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
558 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
560 ; AVX1-LABEL: 'var_cttz_v16i16u'
561 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
562 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
564 ; AVX2-LABEL: 'var_cttz_v16i16u'
565 ; AVX2-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)
566 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i16> %cttz
568   %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 1)
569   ret <16 x i16> %cttz
572 define <32 x i16> @var_cttz_v32i16(<32 x i16> %a) {
573 ; NOBMI-LABEL: 'var_cttz_v32i16'
574 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 92 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
575 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
577 ; SSE2-LABEL: 'var_cttz_v32i16'
578 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 92 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
579 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
581 ; SSE42-LABEL: 'var_cttz_v32i16'
582 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 92 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
583 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
585 ; AVX1-LABEL: 'var_cttz_v32i16'
586 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 72 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
587 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
589 ; AVX2-LABEL: 'var_cttz_v32i16'
590 ; AVX2-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)
591 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
593   %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 0)
594   ret <32 x i16> %cttz
597 define <32 x i16> @var_cttz_v32i16u(<32 x i16> %a) {
598 ; NOBMI-LABEL: 'var_cttz_v32i16u'
599 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 92 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
600 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
602 ; SSE2-LABEL: 'var_cttz_v32i16u'
603 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 92 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
604 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
606 ; SSE42-LABEL: 'var_cttz_v32i16u'
607 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 92 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
608 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
610 ; AVX1-LABEL: 'var_cttz_v32i16u'
611 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 72 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
612 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
614 ; AVX2-LABEL: 'var_cttz_v32i16u'
615 ; AVX2-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)
616 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i16> %cttz
618   %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 1)
619   ret <32 x i16> %cttz
622 define <16 x i8> @var_cttz_v16i8(<16 x i8> %a) {
623 ; NOBMI-LABEL: 'var_cttz_v16i8'
624 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
625 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
627 ; SSE2-LABEL: 'var_cttz_v16i8'
628 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
629 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
631 ; SSE42-LABEL: 'var_cttz_v16i8'
632 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
633 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
635 ; AVX1-LABEL: 'var_cttz_v16i8'
636 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
637 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
639 ; AVX2-LABEL: 'var_cttz_v16i8'
640 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
641 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
643 ; AVX512-LABEL: 'var_cttz_v16i8'
644 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
645 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
647   %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 0)
648   ret <16 x i8> %cttz
651 define <16 x i8> @var_cttz_v16i8u(<16 x i8> %a) {
652 ; NOBMI-LABEL: 'var_cttz_v16i8u'
653 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
654 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
656 ; SSE2-LABEL: 'var_cttz_v16i8u'
657 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
658 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
660 ; SSE42-LABEL: 'var_cttz_v16i8u'
661 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 19 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
662 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
664 ; AVX1-LABEL: 'var_cttz_v16i8u'
665 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 15 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
666 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
668 ; AVX2-LABEL: 'var_cttz_v16i8u'
669 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
670 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
672 ; AVX512-LABEL: 'var_cttz_v16i8u'
673 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 11 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
674 ; AVX512-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <16 x i8> %cttz
676   %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 1)
677   ret <16 x i8> %cttz
680 define <32 x i8> @var_cttz_v32i8(<32 x i8> %a) {
681 ; NOBMI-LABEL: 'var_cttz_v32i8'
682 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
683 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
685 ; SSE2-LABEL: 'var_cttz_v32i8'
686 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
687 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
689 ; SSE42-LABEL: 'var_cttz_v32i8'
690 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
691 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
693 ; AVX1-LABEL: 'var_cttz_v32i8'
694 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
695 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
697 ; AVX2-LABEL: 'var_cttz_v32i8'
698 ; AVX2-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)
699 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
701   %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 0)
702   ret <32 x i8> %cttz
705 define <32 x i8> @var_cttz_v32i8u(<32 x i8> %a) {
706 ; NOBMI-LABEL: 'var_cttz_v32i8u'
707 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 true)
708 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
710 ; SSE2-LABEL: 'var_cttz_v32i8u'
711 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 true)
712 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
714 ; SSE42-LABEL: 'var_cttz_v32i8u'
715 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 38 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 true)
716 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
718 ; AVX1-LABEL: 'var_cttz_v32i8u'
719 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 true)
720 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
722 ; AVX2-LABEL: 'var_cttz_v32i8u'
723 ; AVX2-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)
724 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <32 x i8> %cttz
726   %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 1)
727   ret <32 x i8> %cttz
730 define <64 x i8> @var_cttz_v64i8(<64 x i8> %a) {
731 ; NOBMI-LABEL: 'var_cttz_v64i8'
732 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
733 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
735 ; SSE2-LABEL: 'var_cttz_v64i8'
736 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
737 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
739 ; SSE42-LABEL: 'var_cttz_v64i8'
740 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
741 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
743 ; AVX1-LABEL: 'var_cttz_v64i8'
744 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 60 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
745 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
747 ; AVX2-LABEL: 'var_cttz_v64i8'
748 ; AVX2-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)
749 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
751   %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 0)
752   ret <64 x i8> %cttz
755 define <64 x i8> @var_cttz_v64i8u(<64 x i8> %a) {
756 ; NOBMI-LABEL: 'var_cttz_v64i8u'
757 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
758 ; NOBMI-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
760 ; SSE2-LABEL: 'var_cttz_v64i8u'
761 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
762 ; SSE2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
764 ; SSE42-LABEL: 'var_cttz_v64i8u'
765 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 76 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
766 ; SSE42-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
768 ; AVX1-LABEL: 'var_cttz_v64i8u'
769 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 60 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
770 ; AVX1-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
772 ; AVX2-LABEL: 'var_cttz_v64i8u'
773 ; AVX2-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)
774 ; AVX2-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: ret <64 x i8> %cttz
776   %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 1)
777   ret <64 x i8> %cttz