1*67e74705SXin Li // REQUIRES: powerpc-registered-target
2*67e74705SXin Li // RUN: %clang_cc1 -faltivec -target-feature +power8-vector \
3*67e74705SXin Li // RUN: -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck %s
4*67e74705SXin Li
5*67e74705SXin Li // RUN: %clang_cc1 -faltivec -target-feature +power8-vector \
6*67e74705SXin Li // RUN: -triple powerpc64le-unknown-unknown -emit-llvm %s -o - \
7*67e74705SXin Li // RUN: | FileCheck %s -check-prefix=CHECK-LE
8*67e74705SXin Li
9*67e74705SXin Li // RUN: not %clang_cc1 -faltivec -triple powerpc-unknown-unknown \
10*67e74705SXin Li // RUN: -emit-llvm %s -o - 2>&1 | FileCheck %s -check-prefix=CHECK-PPC
11*67e74705SXin Li #include <altivec.h>
12*67e74705SXin Li
13*67e74705SXin Li // CHECK-PPC: error: __int128 is not supported on this target
14*67e74705SXin Li vector signed __int128 vlll = { -1 };
15*67e74705SXin Li // CHECK-PPC: error: __int128 is not supported on this target
16*67e74705SXin Li vector unsigned __int128 vulll = { 1 };
17*67e74705SXin Li
18*67e74705SXin Li // CHECK-PPC: error: __int128 is not supported on this target
19*67e74705SXin Li vector signed __int128 res_vlll;
20*67e74705SXin Li // CHECK-PPC: error: __int128 is not supported on this target
21*67e74705SXin Li vector unsigned __int128 res_vulll;
22*67e74705SXin Li
23*67e74705SXin Li
24*67e74705SXin Li // CHECK-LABEL: define void @test1
test1()25*67e74705SXin Li void test1() {
26*67e74705SXin Li
27*67e74705SXin Li /* vec_add */
28*67e74705SXin Li res_vlll = vec_add(vlll, vlll);
29*67e74705SXin Li // CHECK: add <1 x i128>
30*67e74705SXin Li // CHECK-LE: add <1 x i128>
31*67e74705SXin Li // CHECK-PPC: error: call to 'vec_add' is ambiguous
32*67e74705SXin Li
33*67e74705SXin Li res_vulll = vec_add(vulll, vulll);
34*67e74705SXin Li // CHECK: add <1 x i128>
35*67e74705SXin Li // CHECK-LE: add <1 x i128>
36*67e74705SXin Li // CHECK-PPC: error: call to 'vec_add' is ambiguous
37*67e74705SXin Li
38*67e74705SXin Li /* vec_vadduqm */
39*67e74705SXin Li res_vlll = vec_vadduqm(vlll, vlll);
40*67e74705SXin Li // CHECK: add <1 x i128>
41*67e74705SXin Li // CHECK-LE: add <1 x i128>
42*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector __int128' (vector of 1 '__int128' value) from incompatible type 'int'
43*67e74705SXin Li
44*67e74705SXin Li res_vulll = vec_vadduqm(vulll, vulll);
45*67e74705SXin Li // CHECK: add <1 x i128>
46*67e74705SXin Li // CHECK-LE: add <1 x i128>
47*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector unsigned __int128' (vector of 1 'unsigned __int128' value) from incompatible type 'int'
48*67e74705SXin Li
49*67e74705SXin Li /* vec_vaddeuqm */
50*67e74705SXin Li res_vlll = vec_vaddeuqm(vlll, vlll, vlll);
51*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vaddeuqm
52*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vaddeuqm
53*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector __int128' (vector of 1 '__int128' value) from incompatible type 'int'
54*67e74705SXin Li
55*67e74705SXin Li res_vulll = vec_vaddeuqm(vulll, vulll, vulll);
56*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vaddeuqm
57*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vaddeuqm
58*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector unsigned __int128' (vector of 1 'unsigned __int128' value) from incompatible type 'int'
59*67e74705SXin Li
60*67e74705SXin Li /* vec_addc */
61*67e74705SXin Li res_vlll = vec_addc(vlll, vlll);
62*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vaddcuq
63*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vaddcuq
64*67e74705SXin Li // KCHECK-PPC: error: call to 'vec_addc' is ambiguous
65*67e74705SXin Li
66*67e74705SXin Li res_vulll = vec_addc(vulll, vulll);
67*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vaddcuq
68*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vaddcuq
69*67e74705SXin Li // KCHECK-PPC: error: call to 'vec_addc' is ambiguous
70*67e74705SXin Li
71*67e74705SXin Li
72*67e74705SXin Li /* vec_vaddcuq */
73*67e74705SXin Li res_vlll = vec_vaddcuq(vlll, vlll);
74*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vaddcuq
75*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vaddcuq
76*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector __int128' (vector of 1 '__int128' value) from incompatible type 'int'
77*67e74705SXin Li
78*67e74705SXin Li res_vulll = vec_vaddcuq(vulll, vulll);
79*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vaddcuq
80*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vaddcuq
81*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector unsigned __int128' (vector of 1 'unsigned __int128' value) from incompatible type 'int'
82*67e74705SXin Li
83*67e74705SXin Li /* vec_vaddecuq */
84*67e74705SXin Li res_vlll = vec_vaddecuq(vlll, vlll, vlll);
85*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vaddecuq
86*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vaddecuq
87*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector __int128' (vector of 1 '__int128' value) from incompatible type 'int'
88*67e74705SXin Li
89*67e74705SXin Li res_vulll = vec_vaddecuq(vulll, vulll, vulll);
90*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vaddecuq
91*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vaddecuq
92*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector unsigned __int128' (vector of 1 'unsigned __int128' value) from incompatible type 'int'
93*67e74705SXin Li
94*67e74705SXin Li /* vec_sub */
95*67e74705SXin Li res_vlll = vec_sub(vlll, vlll);
96*67e74705SXin Li // CHECK: sub <1 x i128>
97*67e74705SXin Li // CHECK-LE: sub <1 x i128>
98*67e74705SXin Li // CHECK-PPC: error: call to 'vec_sub' is ambiguous
99*67e74705SXin Li
100*67e74705SXin Li res_vulll = vec_sub(vulll, vulll);
101*67e74705SXin Li // CHECK: sub <1 x i128>
102*67e74705SXin Li // CHECK-LE: sub <1 x i128>
103*67e74705SXin Li // CHECK-PPC: error: call to 'vec_sub' is ambiguous
104*67e74705SXin Li
105*67e74705SXin Li /* vec_vsubuqm */
106*67e74705SXin Li res_vlll = vec_vsubuqm(vlll, vlll);
107*67e74705SXin Li // CHECK: sub <1 x i128>
108*67e74705SXin Li // CHECK-LE: sub <1 x i128>
109*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector __int128' (vector of 1 '__int128' value) from incompatible type 'int'
110*67e74705SXin Li
111*67e74705SXin Li res_vulll = vec_vsubuqm(vulll, vulll);
112*67e74705SXin Li // CHECK: sub <1 x i128>
113*67e74705SXin Li // CHECK-LE: sub <1 x i128>
114*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector unsigned __int128' (vector of 1 'unsigned __int128' value) from incompatible type 'int'
115*67e74705SXin Li
116*67e74705SXin Li /* vec_vsubeuqm */
117*67e74705SXin Li res_vlll = vec_vsubeuqm(vlll, vlll, vlll);
118*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vsubeuqm
119*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vsubeuqm
120*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector __int128' (vector of 1 '__int128' value) from incompatible type 'int'
121*67e74705SXin Li
122*67e74705SXin Li res_vulll = vec_vsubeuqm(vulll, vulll, vulll);
123*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vsubeuqm
124*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vsubeuqm
125*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector unsigned __int128' (vector of 1 'unsigned __int128' value) from incompatible type 'int'
126*67e74705SXin Li
127*67e74705SXin Li /* vec_subc */
128*67e74705SXin Li res_vlll = vec_subc(vlll, vlll);
129*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vsubcuq
130*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vsubcuq
131*67e74705SXin Li // KCHECK-PPC: error: call to 'vec_subc' is ambiguous
132*67e74705SXin Li
133*67e74705SXin Li res_vulll = vec_subc(vulll, vulll);
134*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vsubcuq
135*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vsubcuq
136*67e74705SXin Li // KCHECK-PPC: error: call to 'vec_subc' is ambiguous
137*67e74705SXin Li
138*67e74705SXin Li /* vec_vsubcuq */
139*67e74705SXin Li res_vlll = vec_vsubcuq(vlll, vlll);
140*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vsubcuq
141*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vsubcuq
142*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector __int128' (vector of 1 '__int128' value) from incompatible type 'int'
143*67e74705SXin Li
144*67e74705SXin Li res_vulll = vec_vsubcuq(vulll, vulll);
145*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vsubcuq
146*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vsubcuq
147*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector unsigned __int128' (vector of 1 'unsigned __int128' value) from incompatible type 'int'
148*67e74705SXin Li
149*67e74705SXin Li /* vec_vsubecuq */
150*67e74705SXin Li res_vlll = vec_vsubecuq(vlll, vlll, vlll);
151*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vsubecuq
152*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vsubecuq
153*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector __int128' (vector of 1 '__int128' value) from incompatible type 'int'
154*67e74705SXin Li
155*67e74705SXin Li res_vulll = vec_vsubecuq(vulll, vulll, vulll);
156*67e74705SXin Li // CHECK: @llvm.ppc.altivec.vsubecuq
157*67e74705SXin Li // CHECK-LE: @llvm.ppc.altivec.vsubecuq
158*67e74705SXin Li // CHECK-PPC: error: assigning to '__vector unsigned __int128' (vector of 1 'unsigned __int128' value) from incompatible type 'int'
159*67e74705SXin Li
160*67e74705SXin Li }
161