1/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
2/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
3/* { dg-require-effective-target powerpc_vsx_ok } */
4/* { dg-options "-O2 -mcpu=power7" } */
5/* { dg-final { scan-assembler "xvcmpeqdp." } } */
6/* { dg-final { scan-assembler "xvcmpgtdp." } } */
7/* { dg-final { scan-assembler "xvcmpgedp." } } */
8/* { dg-final { scan-assembler "xvcmpeqsp." } } */
9/* { dg-final { scan-assembler "xvcmpgtsp." } } */
10/* { dg-final { scan-assembler "xvcmpgesp." } } */
11/* { dg-final { scan-assembler "vcmpbfp." } } */
12/* { dg-final { scan-assembler "vcmpequb." } } */
13/* { dg-final { scan-assembler "vcmpequh." } } */
14/* { dg-final { scan-assembler "vcmpequw." } } */
15/* { dg-final { scan-assembler "vcmpgtub." } } */
16/* { dg-final { scan-assembler "vcmpgtuh." } } */
17/* { dg-final { scan-assembler "vcmpgtuw." } } */
18/* { dg-final { scan-assembler "vcmpgtsb." } } */
19/* { dg-final { scan-assembler "vcmpgtsh." } } */
20/* { dg-final { scan-assembler "vcmpgtsw." } } */
21/* { dg-final { scan-assembler-not "vcmpeqfp" } } */
22/* { dg-final { scan-assembler-not "vcmpgtfp" } } */
23/* { dg-final { scan-assembler-not "vcmpgefp" } } */
24
25/* check that Altivec builtins generate VSX if -mvsx.  */
26
27#include <altivec.h>
28
29int *v16qi_s (vector signed char *a, vector signed char *b, int *p)
30{
31  if (vec_all_eq (*a, *b))
32    *p++ = 1;
33
34  if (vec_all_gt (*a, *b))
35    *p++ = 2;
36
37  if (vec_all_ge (*a, *b))
38    *p++ = 2;
39
40  return p;
41}
42
43int *v16qi_u (vector unsigned char *a, vector unsigned char *b, int *p)
44{
45  if (vec_all_eq (*a, *b))
46    *p++ = 1;
47
48  if (vec_all_gt (*a, *b))
49    *p++ = 2;
50
51  if (vec_all_ge (*a, *b))
52    *p++ = 2;
53
54  return p;
55}
56
57int *v8hi_s (vector short *a, vector short *b, int *p)
58{
59  if (vec_all_eq (*a, *b))
60    *p++ = 1;
61
62  if (vec_all_gt (*a, *b))
63    *p++ = 2;
64
65  if (vec_all_ge (*a, *b))
66    *p++ = 2;
67
68  return p;
69}
70
71int *v8hi_u (vector unsigned short *a, vector unsigned short *b, int *p)
72{
73  if (vec_all_eq (*a, *b))
74    *p++ = 1;
75
76  if (vec_all_gt (*a, *b))
77    *p++ = 2;
78
79  if (vec_all_ge (*a, *b))
80    *p++ = 2;
81
82  return p;
83}
84
85int *v4si_s (vector int *a, vector int *b, int *p)
86{
87  if (vec_all_eq (*a, *b))
88    *p++ = 1;
89
90  if (vec_all_gt (*a, *b))
91    *p++ = 2;
92
93  if (vec_all_ge (*a, *b))
94    *p++ = 2;
95
96  return p;
97}
98
99int *v4si_u (vector unsigned int *a, vector unsigned int *b, int *p)
100{
101  if (vec_all_eq (*a, *b))
102    *p++ = 1;
103
104  if (vec_all_gt (*a, *b))
105    *p++ = 2;
106
107  if (vec_all_ge (*a, *b))
108    *p++ = 2;
109
110  return p;
111}
112
113int *v4sf (vector float *a, vector float *b, int *p)
114{
115  if (vec_all_eq (*a, *b))
116    *p++ = 1;
117
118  if (vec_all_gt (*a, *b))
119    *p++ = 2;
120
121  if (vec_all_ge (*a, *b))
122    *p++ = 3;
123
124  if (vec_all_in (*a, *b))	/* veccmpbfp. */
125    *p++ = 4;
126
127  return p;
128}
129
130int *v2df (vector double *a, vector double *b, int *p)
131{
132  if (vec_all_eq (*a, *b))
133    *p++ = 1;
134
135  if (vec_all_gt (*a, *b))
136    *p++ = 2;
137
138  if (vec_all_ge (*a, *b))
139    *p++ = 3;
140
141  return p;
142}
143