• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
2; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+sse2 | FileCheck %s -check-prefixes=CHECK,SSE,SSE2
3; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+sse4.2 | FileCheck %s -check-prefixes=CHECK,SSE,SSE42
4; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+avx | FileCheck %s -check-prefixes=CHECK,AVX,AVX1
5; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+avx2 | FileCheck %s -check-prefixes=CHECK,AVX,AVX2
6; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+avx512f | FileCheck %s -check-prefixes=CHECK,AVX512,AVX512F
7; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+avx512vl,+avx512bw,+avx512dq | FileCheck %s -check-prefixes=CHECK,AVX512,AVX512BW
8
9; Verify the cost of scalar trailing zero count instructions.
10
11declare i64 @llvm.cttz.i64(i64, i1)
12declare i32 @llvm.cttz.i32(i32, i1)
13declare i16 @llvm.cttz.i16(i16, i1)
14declare  i8 @llvm.cttz.i8(i8, i1)
15
16define i64 @var_cttz_i64(i64 %a) {
17; CHECK-LABEL: 'var_cttz_i64'
18; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i64 @llvm.cttz.i64(i64 %a, i1 false)
19; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i64 %cttz
20;
21  %cttz = call i64 @llvm.cttz.i64(i64 %a, i1 0)
22  ret i64 %cttz
23}
24
25define i64 @var_cttz_i64u(i64 %a) {
26; CHECK-LABEL: 'var_cttz_i64u'
27; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i64 @llvm.cttz.i64(i64 %a, i1 true)
28; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i64 %cttz
29;
30  %cttz = call i64 @llvm.cttz.i64(i64 %a, i1 1)
31  ret i64 %cttz
32}
33
34define i32 @var_cttz_i32(i32 %a) {
35; CHECK-LABEL: 'var_cttz_i32'
36; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i32 @llvm.cttz.i32(i32 %a, i1 false)
37; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 %cttz
38;
39  %cttz = call i32 @llvm.cttz.i32(i32 %a, i1 0)
40  ret i32 %cttz
41}
42
43define i32 @var_cttz_i32u(i32 %a) {
44; CHECK-LABEL: 'var_cttz_i32u'
45; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i32 @llvm.cttz.i32(i32 %a, i1 true)
46; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i32 %cttz
47;
48  %cttz = call i32 @llvm.cttz.i32(i32 %a, i1 1)
49  ret i32 %cttz
50}
51
52define i16 @var_cttz_i16(i16 %a) {
53; CHECK-LABEL: 'var_cttz_i16'
54; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i16 @llvm.cttz.i16(i16 %a, i1 false)
55; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i16 %cttz
56;
57  %cttz = call i16 @llvm.cttz.i16(i16 %a, i1 0)
58  ret i16 %cttz
59}
60
61define i16 @var_cttz_i16u(i16 %a) {
62; CHECK-LABEL: 'var_cttz_i16u'
63; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i16 @llvm.cttz.i16(i16 %a, i1 true)
64; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i16 %cttz
65;
66  %cttz = call i16 @llvm.cttz.i16(i16 %a, i1 1)
67  ret i16 %cttz
68}
69
70define i8 @var_cttz_i8(i8 %a) {
71; CHECK-LABEL: 'var_cttz_i8'
72; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 false)
73; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i8 %cttz
74;
75  %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 0)
76  ret i8 %cttz
77}
78
79define i8 @var_cttz_i8u(i8 %a) {
80; CHECK-LABEL: 'var_cttz_i8u'
81; CHECK-NEXT:  Cost Model: Found an estimated cost of 1 for instruction: %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 true)
82; CHECK-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret i8 %cttz
83;
84  %cttz = call i8 @llvm.cttz.i8(i8 %a, i1 1)
85  ret i8 %cttz
86}
87
88; Verify the cost of vector trailing zero count instructions.
89
90declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1)
91declare <4 x i32> @llvm.cttz.v4i32(<4 x i32>, i1)
92declare <8 x i16> @llvm.cttz.v8i16(<8 x i16>, i1)
93declare <16 x i8> @llvm.cttz.v16i8(<16 x i8>, i1)
94
95declare <4 x i64> @llvm.cttz.v4i64(<4 x i64>, i1)
96declare <8 x i32> @llvm.cttz.v8i32(<8 x i32>, i1)
97declare <16 x i16> @llvm.cttz.v16i16(<16 x i16>, i1)
98declare <32 x i8> @llvm.cttz.v32i8(<32 x i8>, i1)
99
100declare <8 x i64> @llvm.cttz.v8i64(<8 x i64>, i1)
101declare <16 x i32> @llvm.cttz.v16i32(<16 x i32>, i1)
102declare <32 x i16> @llvm.cttz.v32i16(<32 x i16>, i1)
103declare <64 x i8> @llvm.cttz.v64i8(<64 x i8>, i1)
104
105define <2 x i64> @var_cttz_v2i64(<2 x i64> %a) {
106; SSE2-LABEL: 'var_cttz_v2i64'
107; SSE2-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
108; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %cttz
109;
110; SSE42-LABEL: 'var_cttz_v2i64'
111; SSE42-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
112; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %cttz
113;
114; AVX-LABEL: 'var_cttz_v2i64'
115; AVX-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
116; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %cttz
117;
118; AVX512-LABEL: 'var_cttz_v2i64'
119; AVX512-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
120; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %cttz
121;
122  %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 0)
123  ret <2 x i64> %cttz
124}
125
126define <2 x i64> @var_cttz_v2i64u(<2 x i64> %a) {
127; SSE2-LABEL: 'var_cttz_v2i64u'
128; SSE2-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true)
129; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %cttz
130;
131; SSE42-LABEL: 'var_cttz_v2i64u'
132; SSE42-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true)
133; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %cttz
134;
135; AVX-LABEL: 'var_cttz_v2i64u'
136; AVX-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true)
137; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %cttz
138;
139; AVX512-LABEL: 'var_cttz_v2i64u'
140; AVX512-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 true)
141; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <2 x i64> %cttz
142;
143  %cttz = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 1)
144  ret <2 x i64> %cttz
145}
146
147define <4 x i64> @var_cttz_v4i64(<4 x i64> %a) {
148; SSE2-LABEL: 'var_cttz_v4i64'
149; SSE2-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
150; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %cttz
151;
152; SSE42-LABEL: 'var_cttz_v4i64'
153; SSE42-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)
154; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %cttz
155;
156; AVX1-LABEL: 'var_cttz_v4i64'
157; 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)
158; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %cttz
159;
160; AVX2-LABEL: 'var_cttz_v4i64'
161; AVX2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
162; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %cttz
163;
164; AVX512-LABEL: 'var_cttz_v4i64'
165; AVX512-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
166; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %cttz
167;
168  %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 0)
169  ret <4 x i64> %cttz
170}
171
172define <4 x i64> @var_cttz_v4i64u(<4 x i64> %a) {
173; SSE2-LABEL: 'var_cttz_v4i64u'
174; SSE2-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
175; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %cttz
176;
177; SSE42-LABEL: 'var_cttz_v4i64u'
178; SSE42-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)
179; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %cttz
180;
181; AVX1-LABEL: 'var_cttz_v4i64u'
182; 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)
183; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %cttz
184;
185; AVX2-LABEL: 'var_cttz_v4i64u'
186; AVX2-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
187; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %cttz
188;
189; AVX512-LABEL: 'var_cttz_v4i64u'
190; AVX512-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 true)
191; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %cttz
192;
193  %cttz = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 1)
194  ret <4 x i64> %cttz
195}
196
197define <8 x i64> @var_cttz_v8i64(<8 x i64> %a) {
198; SSE2-LABEL: 'var_cttz_v8i64'
199; SSE2-NEXT:  Cost Model: Found an estimated cost of 56 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
200; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %cttz
201;
202; SSE42-LABEL: 'var_cttz_v8i64'
203; SSE42-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)
204; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %cttz
205;
206; AVX1-LABEL: 'var_cttz_v8i64'
207; 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)
208; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %cttz
209;
210; AVX2-LABEL: 'var_cttz_v8i64'
211; AVX2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
212; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %cttz
213;
214; AVX512F-LABEL: 'var_cttz_v8i64'
215; AVX512F-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
216; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %cttz
217;
218; AVX512BW-LABEL: 'var_cttz_v8i64'
219; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 false)
220; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %cttz
221;
222  %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 0)
223  ret <8 x i64> %cttz
224}
225
226define <8 x i64> @var_cttz_v8i64u(<8 x i64> %a) {
227; SSE2-LABEL: 'var_cttz_v8i64u'
228; SSE2-NEXT:  Cost Model: Found an estimated cost of 56 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
229; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %cttz
230;
231; SSE42-LABEL: 'var_cttz_v8i64u'
232; SSE42-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)
233; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %cttz
234;
235; AVX1-LABEL: 'var_cttz_v8i64u'
236; 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)
237; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %cttz
238;
239; AVX2-LABEL: 'var_cttz_v8i64u'
240; AVX2-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
241; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %cttz
242;
243; AVX512F-LABEL: 'var_cttz_v8i64u'
244; AVX512F-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
245; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %cttz
246;
247; AVX512BW-LABEL: 'var_cttz_v8i64u'
248; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 10 for instruction: %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 true)
249; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %cttz
250;
251  %cttz = call <8 x i64> @llvm.cttz.v8i64(<8 x i64> %a, i1 1)
252  ret <8 x i64> %cttz
253}
254
255define <4 x i32> @var_cttz_v4i32(<4 x i32> %a) {
256; SSE2-LABEL: 'var_cttz_v4i32'
257; SSE2-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false)
258; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %cttz
259;
260; SSE42-LABEL: 'var_cttz_v4i32'
261; SSE42-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)
262; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %cttz
263;
264; AVX-LABEL: 'var_cttz_v4i32'
265; AVX-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)
266; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %cttz
267;
268; AVX512-LABEL: 'var_cttz_v4i32'
269; 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)
270; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %cttz
271;
272  %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 0)
273  ret <4 x i32> %cttz
274}
275
276define <4 x i32> @var_cttz_v4i32u(<4 x i32> %a) {
277; SSE2-LABEL: 'var_cttz_v4i32u'
278; SSE2-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 true)
279; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %cttz
280;
281; SSE42-LABEL: 'var_cttz_v4i32u'
282; SSE42-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)
283; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %cttz
284;
285; AVX-LABEL: 'var_cttz_v4i32u'
286; AVX-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)
287; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %cttz
288;
289; AVX512-LABEL: 'var_cttz_v4i32u'
290; 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)
291; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i32> %cttz
292;
293  %cttz = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 1)
294  ret <4 x i32> %cttz
295}
296
297define <8 x i32> @var_cttz_v8i32(<8 x i32> %a) {
298; SSE2-LABEL: 'var_cttz_v8i32'
299; SSE2-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
300; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %cttz
301;
302; SSE42-LABEL: 'var_cttz_v8i32'
303; SSE42-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
304; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %cttz
305;
306; AVX1-LABEL: 'var_cttz_v8i32'
307; AVX1-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
308; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %cttz
309;
310; AVX2-LABEL: 'var_cttz_v8i32'
311; AVX2-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
312; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %cttz
313;
314; AVX512-LABEL: 'var_cttz_v8i32'
315; AVX512-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
316; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %cttz
317;
318  %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 0)
319  ret <8 x i32> %cttz
320}
321
322define <8 x i32> @var_cttz_v8i32u(<8 x i32> %a) {
323; SSE2-LABEL: 'var_cttz_v8i32u'
324; SSE2-NEXT:  Cost Model: Found an estimated cost of 36 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
325; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %cttz
326;
327; SSE42-LABEL: 'var_cttz_v8i32u'
328; SSE42-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
329; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %cttz
330;
331; AVX1-LABEL: 'var_cttz_v8i32u'
332; AVX1-NEXT:  Cost Model: Found an estimated cost of 30 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
333; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %cttz
334;
335; AVX2-LABEL: 'var_cttz_v8i32u'
336; AVX2-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
337; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %cttz
338;
339; AVX512-LABEL: 'var_cttz_v8i32u'
340; AVX512-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 true)
341; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %cttz
342;
343  %cttz = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 1)
344  ret <8 x i32> %cttz
345}
346
347define <16 x i32> @var_cttz_v16i32(<16 x i32> %a) {
348; SSE2-LABEL: 'var_cttz_v16i32'
349; SSE2-NEXT:  Cost Model: Found an estimated cost of 72 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
350; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %cttz
351;
352; SSE42-LABEL: 'var_cttz_v16i32'
353; SSE42-NEXT:  Cost Model: Found an estimated cost of 56 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
354; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %cttz
355;
356; AVX1-LABEL: 'var_cttz_v16i32'
357; AVX1-NEXT:  Cost Model: Found an estimated cost of 60 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
358; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %cttz
359;
360; AVX2-LABEL: 'var_cttz_v16i32'
361; AVX2-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
362; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %cttz
363;
364; AVX512F-LABEL: 'var_cttz_v16i32'
365; AVX512F-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
366; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %cttz
367;
368; AVX512BW-LABEL: 'var_cttz_v16i32'
369; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 false)
370; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %cttz
371;
372  %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 0)
373  ret <16 x i32> %cttz
374}
375
376define <16 x i32> @var_cttz_v16i32u(<16 x i32> %a) {
377; SSE2-LABEL: 'var_cttz_v16i32u'
378; SSE2-NEXT:  Cost Model: Found an estimated cost of 72 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
379; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %cttz
380;
381; SSE42-LABEL: 'var_cttz_v16i32u'
382; SSE42-NEXT:  Cost Model: Found an estimated cost of 56 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
383; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %cttz
384;
385; AVX1-LABEL: 'var_cttz_v16i32u'
386; AVX1-NEXT:  Cost Model: Found an estimated cost of 60 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
387; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %cttz
388;
389; AVX2-LABEL: 'var_cttz_v16i32u'
390; AVX2-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
391; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %cttz
392;
393; AVX512F-LABEL: 'var_cttz_v16i32u'
394; AVX512F-NEXT:  Cost Model: Found an estimated cost of 28 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
395; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %cttz
396;
397; AVX512BW-LABEL: 'var_cttz_v16i32u'
398; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 14 for instruction: %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 true)
399; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %cttz
400;
401  %cttz = call <16 x i32> @llvm.cttz.v16i32(<16 x i32> %a, i1 1)
402  ret <16 x i32> %cttz
403}
404
405define <8 x i16> @var_cttz_v8i16(<8 x i16> %a) {
406; SSE2-LABEL: 'var_cttz_v8i16'
407; SSE2-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
408; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %cttz
409;
410; SSE42-LABEL: 'var_cttz_v8i16'
411; SSE42-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
412; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %cttz
413;
414; AVX-LABEL: 'var_cttz_v8i16'
415; AVX-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
416; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %cttz
417;
418; AVX512-LABEL: 'var_cttz_v8i16'
419; AVX512-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
420; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %cttz
421;
422  %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 0)
423  ret <8 x i16> %cttz
424}
425
426define <8 x i16> @var_cttz_v8i16u(<8 x i16> %a) {
427; SSE2-LABEL: 'var_cttz_v8i16u'
428; SSE2-NEXT:  Cost Model: Found an estimated cost of 16 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
429; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %cttz
430;
431; SSE42-LABEL: 'var_cttz_v8i16u'
432; SSE42-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
433; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %cttz
434;
435; AVX-LABEL: 'var_cttz_v8i16u'
436; AVX-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
437; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %cttz
438;
439; AVX512-LABEL: 'var_cttz_v8i16u'
440; AVX512-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 true)
441; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i16> %cttz
442;
443  %cttz = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 1)
444  ret <8 x i16> %cttz
445}
446
447define <16 x i16> @var_cttz_v16i16(<16 x i16> %a) {
448; SSE2-LABEL: 'var_cttz_v16i16'
449; SSE2-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
450; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %cttz
451;
452; SSE42-LABEL: 'var_cttz_v16i16'
453; SSE42-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)
454; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %cttz
455;
456; AVX1-LABEL: 'var_cttz_v16i16'
457; AVX1-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
458; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %cttz
459;
460; AVX2-LABEL: 'var_cttz_v16i16'
461; AVX2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
462; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %cttz
463;
464; AVX512-LABEL: 'var_cttz_v16i16'
465; AVX512-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
466; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %cttz
467;
468  %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 0)
469  ret <16 x i16> %cttz
470}
471
472define <16 x i16> @var_cttz_v16i16u(<16 x i16> %a) {
473; SSE2-LABEL: 'var_cttz_v16i16u'
474; SSE2-NEXT:  Cost Model: Found an estimated cost of 32 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
475; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %cttz
476;
477; SSE42-LABEL: 'var_cttz_v16i16u'
478; SSE42-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)
479; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %cttz
480;
481; AVX1-LABEL: 'var_cttz_v16i16u'
482; AVX1-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
483; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %cttz
484;
485; AVX2-LABEL: 'var_cttz_v16i16u'
486; AVX2-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
487; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %cttz
488;
489; AVX512-LABEL: 'var_cttz_v16i16u'
490; AVX512-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 true)
491; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %cttz
492;
493  %cttz = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 1)
494  ret <16 x i16> %cttz
495}
496
497define <32 x i16> @var_cttz_v32i16(<32 x i16> %a) {
498; SSE2-LABEL: 'var_cttz_v32i16'
499; SSE2-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
500; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %cttz
501;
502; SSE42-LABEL: 'var_cttz_v32i16'
503; SSE42-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)
504; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %cttz
505;
506; AVX1-LABEL: 'var_cttz_v32i16'
507; AVX1-NEXT:  Cost Model: Found an estimated cost of 52 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
508; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %cttz
509;
510; AVX2-LABEL: 'var_cttz_v32i16'
511; AVX2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
512; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %cttz
513;
514; AVX512F-LABEL: 'var_cttz_v32i16'
515; AVX512F-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
516; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %cttz
517;
518; AVX512BW-LABEL: 'var_cttz_v32i16'
519; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 false)
520; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %cttz
521;
522  %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 0)
523  ret <32 x i16> %cttz
524}
525
526define <32 x i16> @var_cttz_v32i16u(<32 x i16> %a) {
527; SSE2-LABEL: 'var_cttz_v32i16u'
528; SSE2-NEXT:  Cost Model: Found an estimated cost of 64 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
529; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %cttz
530;
531; SSE42-LABEL: 'var_cttz_v32i16u'
532; SSE42-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)
533; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %cttz
534;
535; AVX1-LABEL: 'var_cttz_v32i16u'
536; AVX1-NEXT:  Cost Model: Found an estimated cost of 52 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
537; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %cttz
538;
539; AVX2-LABEL: 'var_cttz_v32i16u'
540; AVX2-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
541; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %cttz
542;
543; AVX512F-LABEL: 'var_cttz_v32i16u'
544; AVX512F-NEXT:  Cost Model: Found an estimated cost of 24 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
545; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %cttz
546;
547; AVX512BW-LABEL: 'var_cttz_v32i16u'
548; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 12 for instruction: %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 true)
549; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %cttz
550;
551  %cttz = call <32 x i16> @llvm.cttz.v32i16(<32 x i16> %a, i1 1)
552  ret <32 x i16> %cttz
553}
554
555define <16 x i8> @var_cttz_v16i8(<16 x i8> %a) {
556; SSE2-LABEL: 'var_cttz_v16i8'
557; SSE2-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
558; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %cttz
559;
560; SSE42-LABEL: 'var_cttz_v16i8'
561; SSE42-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
562; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %cttz
563;
564; AVX-LABEL: 'var_cttz_v16i8'
565; AVX-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
566; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %cttz
567;
568; AVX512-LABEL: 'var_cttz_v16i8'
569; AVX512-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
570; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %cttz
571;
572  %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 0)
573  ret <16 x i8> %cttz
574}
575
576define <16 x i8> @var_cttz_v16i8u(<16 x i8> %a) {
577; SSE2-LABEL: 'var_cttz_v16i8u'
578; SSE2-NEXT:  Cost Model: Found an estimated cost of 13 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
579; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %cttz
580;
581; SSE42-LABEL: 'var_cttz_v16i8u'
582; SSE42-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
583; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %cttz
584;
585; AVX-LABEL: 'var_cttz_v16i8u'
586; AVX-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
587; AVX-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %cttz
588;
589; AVX512-LABEL: 'var_cttz_v16i8u'
590; AVX512-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 true)
591; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i8> %cttz
592;
593  %cttz = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 1)
594  ret <16 x i8> %cttz
595}
596
597define <32 x i8> @var_cttz_v32i8(<32 x i8> %a) {
598; SSE2-LABEL: 'var_cttz_v32i8'
599; SSE2-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
600; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %cttz
601;
602; SSE42-LABEL: 'var_cttz_v32i8'
603; SSE42-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)
604; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %cttz
605;
606; AVX1-LABEL: 'var_cttz_v32i8'
607; AVX1-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
608; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %cttz
609;
610; AVX2-LABEL: 'var_cttz_v32i8'
611; AVX2-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
612; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %cttz
613;
614; AVX512-LABEL: 'var_cttz_v32i8'
615; AVX512-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
616; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %cttz
617;
618  %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 0)
619  ret <32 x i8> %cttz
620}
621
622define <32 x i8> @var_cttz_v32i8u(<32 x i8> %a) {
623; SSE2-LABEL: 'var_cttz_v32i8u'
624; SSE2-NEXT:  Cost Model: Found an estimated cost of 26 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 true)
625; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %cttz
626;
627; SSE42-LABEL: 'var_cttz_v32i8u'
628; SSE42-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)
629; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %cttz
630;
631; AVX1-LABEL: 'var_cttz_v32i8u'
632; AVX1-NEXT:  Cost Model: Found an estimated cost of 20 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 true)
633; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %cttz
634;
635; AVX2-LABEL: 'var_cttz_v32i8u'
636; AVX2-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 true)
637; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %cttz
638;
639; AVX512-LABEL: 'var_cttz_v32i8u'
640; AVX512-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 true)
641; AVX512-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i8> %cttz
642;
643  %cttz = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 1)
644  ret <32 x i8> %cttz
645}
646
647define <64 x i8> @var_cttz_v64i8(<64 x i8> %a) {
648; SSE2-LABEL: 'var_cttz_v64i8'
649; SSE2-NEXT:  Cost Model: Found an estimated cost of 52 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
650; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %cttz
651;
652; SSE42-LABEL: 'var_cttz_v64i8'
653; SSE42-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)
654; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %cttz
655;
656; AVX1-LABEL: 'var_cttz_v64i8'
657; AVX1-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
658; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %cttz
659;
660; AVX2-LABEL: 'var_cttz_v64i8'
661; AVX2-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
662; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %cttz
663;
664; AVX512F-LABEL: 'var_cttz_v64i8'
665; AVX512F-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
666; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %cttz
667;
668; AVX512BW-LABEL: 'var_cttz_v64i8'
669; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 false)
670; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %cttz
671;
672  %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 0)
673  ret <64 x i8> %cttz
674}
675
676define <64 x i8> @var_cttz_v64i8u(<64 x i8> %a) {
677; SSE2-LABEL: 'var_cttz_v64i8u'
678; SSE2-NEXT:  Cost Model: Found an estimated cost of 52 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
679; SSE2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %cttz
680;
681; SSE42-LABEL: 'var_cttz_v64i8u'
682; SSE42-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)
683; SSE42-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %cttz
684;
685; AVX1-LABEL: 'var_cttz_v64i8u'
686; AVX1-NEXT:  Cost Model: Found an estimated cost of 40 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
687; AVX1-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %cttz
688;
689; AVX2-LABEL: 'var_cttz_v64i8u'
690; AVX2-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
691; AVX2-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %cttz
692;
693; AVX512F-LABEL: 'var_cttz_v64i8u'
694; AVX512F-NEXT:  Cost Model: Found an estimated cost of 18 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
695; AVX512F-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %cttz
696;
697; AVX512BW-LABEL: 'var_cttz_v64i8u'
698; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 9 for instruction: %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 true)
699; AVX512BW-NEXT:  Cost Model: Found an estimated cost of 0 for instruction: ret <64 x i8> %cttz
700;
701  %cttz = call <64 x i8> @llvm.cttz.v64i8(<64 x i8> %a, i1 1)
702  ret <64 x i8> %cttz
703}
704