slp-pr56812.cc: Adjust with respect to -fvect-cost-model changes.
[platform/upstream/gcc.git] / gcc / testsuite / gcc.target / powerpc / p8vector-builtin-4.c
1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
3 /* { dg-require-effective-target powerpc_p8vector_ok } */
4 /* { dg-options "-mcpu=power8 -O3 -ftree-vectorize -fvect-cost-model=dynamic" } */
5
6 #include <altivec.h>
7
8 typedef vector long long                vll_sign;
9 typedef vector unsigned long long       vll_uns;
10 typedef vector bool long long           vll_bool;
11
12 typedef vector int                      vi_sign;
13 typedef vector unsigned int             vi_uns;
14 typedef vector bool int                 vi_bool;
15
16 typedef vector short                    vs_sign;
17 typedef vector unsigned short           vs_uns;
18 typedef vector bool short               vs_bool;
19
20 typedef vector signed char              vc_sign;
21 typedef vector unsigned char            vc_uns;
22 typedef vector bool char                vc_bool;
23
24 vll_sign vll_clz_1 (vll_sign a)
25 {
26   return __builtin_altivec_vclzd (a);
27 }
28
29 vll_sign vll_clz_2 (vll_sign a)
30 {
31   return vec_vclz (a);
32 }
33
34 vll_sign vll_clz_3 (vll_sign a)
35 {
36   return vec_vclzd (a);
37 }
38
39 vll_uns vll_clz_4 (vll_uns a)
40 {
41   return vec_vclz (a);
42 }
43
44 vll_uns vll_clz_5 (vll_uns a)
45 {
46   return vec_vclzd (a);
47 }
48
49 vi_sign vi_clz_1 (vi_sign a)
50 {
51   return __builtin_altivec_vclzw (a);
52 }
53
54 vi_sign vi_clz_2 (vi_sign a)
55 {
56   return vec_vclz (a);
57 }
58
59 vi_sign vi_clz_3 (vi_sign a)
60 {
61   return vec_vclzw (a);
62 }
63
64 vi_uns vi_clz_4 (vi_uns a)
65 {
66   return vec_vclz (a);
67 }
68
69 vi_uns vi_clz_5 (vi_uns a)
70 {
71   return vec_vclzw (a);
72 }
73
74 vs_sign vs_clz_1 (vs_sign a)
75 {
76   return __builtin_altivec_vclzh (a);
77 }
78
79 vs_sign vs_clz_2 (vs_sign a)
80 {
81   return vec_vclz (a);
82 }
83
84 vs_sign vs_clz_3 (vs_sign a)
85 {
86   return vec_vclzh (a);
87 }
88
89 vs_uns vs_clz_4 (vs_uns a)
90 {
91   return vec_vclz (a);
92 }
93
94 vs_uns vs_clz_5 (vs_uns a)
95 {
96   return vec_vclzh (a);
97 }
98
99 vc_sign vc_clz_1 (vc_sign a)
100 {
101   return __builtin_altivec_vclzb (a);
102 }
103
104 vc_sign vc_clz_2 (vc_sign a)
105 {
106   return vec_vclz (a);
107 }
108
109 vc_sign vc_clz_3 (vc_sign a)
110 {
111   return vec_vclzb (a);
112 }
113
114 vc_uns vc_clz_4 (vc_uns a)
115 {
116   return vec_vclz (a);
117 }
118
119 vc_uns vc_clz_5 (vc_uns a)
120 {
121   return vec_vclzb (a);
122 }
123
124 vll_sign vll_popcnt_1 (vll_sign a)
125 {
126   return __builtin_altivec_vpopcntd (a);
127 }
128
129 vll_sign vll_popcnt_2 (vll_sign a)
130 {
131   return vec_vpopcnt (a);
132 }
133
134 vll_sign vll_popcnt_3 (vll_sign a)
135 {
136   return vec_vpopcntd (a);
137 }
138
139 vll_uns vll_popcnt_4 (vll_uns a)
140 {
141   return vec_vpopcnt (a);
142 }
143
144 vll_uns vll_popcnt_5 (vll_uns a)
145 {
146   return vec_vpopcntd (a);
147 }
148
149 vi_sign vi_popcnt_1 (vi_sign a)
150 {
151   return __builtin_altivec_vpopcntw (a);
152 }
153
154 vi_sign vi_popcnt_2 (vi_sign a)
155 {
156   return vec_vpopcnt (a);
157 }
158
159 vi_sign vi_popcnt_3 (vi_sign a)
160 {
161   return vec_vpopcntw (a);
162 }
163
164 vi_uns vi_popcnt_4 (vi_uns a)
165 {
166   return vec_vpopcnt (a);
167 }
168
169 vi_uns vi_popcnt_5 (vi_uns a)
170 {
171   return vec_vpopcntw (a);
172 }
173
174 vs_sign vs_popcnt_1 (vs_sign a)
175 {
176   return __builtin_altivec_vpopcnth (a);
177 }
178
179 vs_sign vs_popcnt_2 (vs_sign a)
180 {
181   return vec_vpopcnt (a);
182 }
183
184 vs_sign vs_popcnt_3 (vs_sign a)
185 {
186   return vec_vpopcnth (a);
187 }
188
189 vs_uns vs_popcnt_4 (vs_uns a)
190 {
191   return vec_vpopcnt (a);
192 }
193
194 vs_uns vs_popcnt_5 (vs_uns a)
195 {
196   return vec_vpopcnth (a);
197 }
198
199 vc_sign vc_popcnt_1 (vc_sign a)
200 {
201   return __builtin_altivec_vpopcntb (a);
202 }
203
204 vc_sign vc_popcnt_2 (vc_sign a)
205 {
206   return vec_vpopcnt (a);
207 }
208
209 vc_sign vc_popcnt_3 (vc_sign a)
210 {
211   return vec_vpopcntb (a);
212 }
213
214 vc_uns vc_popcnt_4 (vc_uns a)
215 {
216   return vec_vpopcnt (a);
217 }
218
219 vc_uns vc_popcnt_5 (vc_uns a)
220 {
221   return vec_vpopcntb (a);
222 }
223
224 vc_uns vc_gbb_1 (vc_uns a)
225 {
226   return __builtin_altivec_vgbbd (a);
227 }
228
229 vc_sign vc_gbb_2 (vc_sign a)
230 {
231   return vec_vgbbd (a);
232 }
233
234 vc_uns vc_gbb_3 (vc_uns a)
235 {
236   return vec_vgbbd (a);
237 }
238
239 /* { dg-final { scan-assembler-times "vclzd"    5 } } */
240 /* { dg-final { scan-assembler-times "vclzw"    5 } } */
241 /* { dg-final { scan-assembler-times "vclzh"    5 } } */
242 /* { dg-final { scan-assembler-times "vclzb"    5 } } */
243
244 /* { dg-final { scan-assembler-times "vpopcntd" 5 } } */
245 /* { dg-final { scan-assembler-times "vpopcntw" 5 } } */
246 /* { dg-final { scan-assembler-times "vpopcnth" 5 } } */
247 /* { dg-final { scan-assembler-times "vpopcntb" 5 } } */
248
249 /* { dg-final { scan-assembler-times "vgbbd"    3 } } */