1 /* { dg-do compile } */
2 /* { dg-require-effective-target powerpc_altivec_ok } */
3 /* { dg-require-effective-target lp64 } */
4 /* { dg-options "-mdejagnu-cpu=power6 -maltivec -O2" } */
5 
6 #include <altivec.h>
7 
8 #ifdef _ARCH_PWR6
9 vector int
test1(vector int a,vector int b)10 test1 (vector int a, vector int b)
11 {
12   return vec_add (a, b);
13 }
14 #else
15 #error failed on default power6 pragma target
16 #endif
17 
18 #pragma GCC target ("cpu=power7")
19 #undef _ALTIVEC_H
20 #include <altivec.h>
21 #ifdef _ARCH_PWR7
22 vector signed int
test2(vector signed int a,vector signed int b)23 test2 (vector signed int a, vector signed int b)
24 {
25   return vec_sldw (a, b, 3);
26 }
27 #else
28 #error failed to set power7 pragma target
29 #endif
30 
31 #pragma GCC target ("cpu=power8")
32 #undef _ALTIVEC_H
33 #include <altivec.h>
34 #ifdef _ARCH_PWR8
35 vector int
test3(vector int a,vector int b)36 test3 (vector int a, vector int b)
37 {
38   return vec_mergee (a, b);
39 }
40 
41 typedef __attribute__((altivec(vector__))) long vec_t;
42 int
test3b(vec_t a,vec_t b)43 test3b (vec_t a, vec_t b)
44 {
45   return __builtin_vec_vcmpeq_p (2, a, b);
46 }
47 #else
48 #error failed to set power8 pragma target.
49 #endif
50 
51 #pragma GCC target ("cpu=power9,power9-vector")
52 #undef _ALTIVEC_H
53 #include <altivec.h>
54 #ifdef _ARCH_PWR9
55 vector bool int
test4(vector signed int a,vector signed int b)56 test4 (vector signed int a, vector signed int b)
57 {
58   return vec_cmpnez (a, b);
59 }
60 #else
61 #error Failed to set cpu=power9 pragma target.
62 #endif
63 
64