1*67e74705SXin Li // REQUIRES: powerpc-registered-target
2*67e74705SXin Li // RUN: %clang_cc1 -faltivec -triple powerpc64le-unknown-unknown \
3*67e74705SXin Li // RUN: -target-feature +crypto -target-feature +power8-vector \
4*67e74705SXin Li // RUN: -emit-llvm %s -o - | FileCheck %s
5*67e74705SXin Li
6*67e74705SXin Li // RUN: %clang_cc1 -faltivec -triple powerpc64-unknown-unknown \
7*67e74705SXin Li // RUN: -target-feature +crypto -target-feature +power8-vector \
8*67e74705SXin Li // RUN: -emit-llvm %s -o - | FileCheck %s
9*67e74705SXin Li #include <altivec.h>
10*67e74705SXin Li #define B_INIT1 { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, \
11*67e74705SXin Li 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10 };
12*67e74705SXin Li #define B_INIT2 { 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, \
13*67e74705SXin Li 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x70 };
14*67e74705SXin Li #define H_INIT1 { 0x0102, 0x0304, 0x0506, 0x0708, \
15*67e74705SXin Li 0x090A, 0x0B0C, 0x0D0E, 0x0F10 };
16*67e74705SXin Li #define H_INIT2 { 0x7172, 0x7374, 0x7576, 0x7778, \
17*67e74705SXin Li 0x797A, 0x7B7C, 0x7D7E, 0x7F70 };
18*67e74705SXin Li #define W_INIT1 { 0x01020304, 0x05060708, \
19*67e74705SXin Li 0x090A0B0C, 0x0D0E0F10 };
20*67e74705SXin Li #define W_INIT2 { 0x71727374, 0x75767778, \
21*67e74705SXin Li 0x797A7B7C, 0x7D7E7F70 };
22*67e74705SXin Li #define D_INIT1 { 0x0102030405060708, \
23*67e74705SXin Li 0x090A0B0C0D0E0F10 };
24*67e74705SXin Li #define D_INIT2 { 0x7172737475767778, \
25*67e74705SXin Li 0x797A7B7C7D7E7F70 };
26*67e74705SXin Li
27*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vpmsumb
test_vpmsumb(void)28*67e74705SXin Li vector unsigned char test_vpmsumb(void)
29*67e74705SXin Li {
30*67e74705SXin Li vector unsigned char a = B_INIT1
31*67e74705SXin Li vector unsigned char b = B_INIT2
32*67e74705SXin Li return __builtin_altivec_crypto_vpmsumb(a, b);
33*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpmsumb
34*67e74705SXin Li }
35*67e74705SXin Li
36*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vpmsumh
test_vpmsumh(void)37*67e74705SXin Li vector unsigned short test_vpmsumh(void)
38*67e74705SXin Li {
39*67e74705SXin Li vector unsigned short a = H_INIT1
40*67e74705SXin Li vector unsigned short b = H_INIT2
41*67e74705SXin Li return __builtin_altivec_crypto_vpmsumh(a, b);
42*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpmsumh
43*67e74705SXin Li }
44*67e74705SXin Li
45*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vpmsumw
test_vpmsumw(void)46*67e74705SXin Li vector unsigned int test_vpmsumw(void)
47*67e74705SXin Li {
48*67e74705SXin Li vector unsigned int a = W_INIT1
49*67e74705SXin Li vector unsigned int b = W_INIT2
50*67e74705SXin Li return __builtin_altivec_crypto_vpmsumw(a, b);
51*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpmsumw
52*67e74705SXin Li }
53*67e74705SXin Li
54*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vpmsumd
test_vpmsumd(void)55*67e74705SXin Li vector unsigned long long test_vpmsumd(void)
56*67e74705SXin Li {
57*67e74705SXin Li vector unsigned long long a = D_INIT1
58*67e74705SXin Li vector unsigned long long b = D_INIT2
59*67e74705SXin Li return __builtin_altivec_crypto_vpmsumd(a, b);
60*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpmsumd
61*67e74705SXin Li }
62*67e74705SXin Li
63*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vsbox
test_vsbox(void)64*67e74705SXin Li vector unsigned long long test_vsbox(void)
65*67e74705SXin Li {
66*67e74705SXin Li vector unsigned long long a = D_INIT1
67*67e74705SXin Li return __builtin_altivec_crypto_vsbox(a);
68*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vsbox
69*67e74705SXin Li }
70*67e74705SXin Li
71*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vpermxorb
test_vpermxorb(void)72*67e74705SXin Li vector unsigned char test_vpermxorb(void)
73*67e74705SXin Li {
74*67e74705SXin Li vector unsigned char a = B_INIT1
75*67e74705SXin Li vector unsigned char b = B_INIT2
76*67e74705SXin Li vector unsigned char c = B_INIT2
77*67e74705SXin Li return __builtin_altivec_crypto_vpermxor(a, b, c);
78*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpermxor
79*67e74705SXin Li }
80*67e74705SXin Li
81*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vpermxorh
test_vpermxorh(void)82*67e74705SXin Li vector unsigned short test_vpermxorh(void)
83*67e74705SXin Li {
84*67e74705SXin Li vector unsigned short a = H_INIT1
85*67e74705SXin Li vector unsigned short b = H_INIT2
86*67e74705SXin Li vector unsigned short c = H_INIT2
87*67e74705SXin Li return __builtin_altivec_crypto_vpermxor(a, b, c);
88*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpermxor
89*67e74705SXin Li }
90*67e74705SXin Li
91*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vpermxorw
test_vpermxorw(void)92*67e74705SXin Li vector unsigned int test_vpermxorw(void)
93*67e74705SXin Li {
94*67e74705SXin Li vector unsigned int a = W_INIT1
95*67e74705SXin Li vector unsigned int b = W_INIT2
96*67e74705SXin Li vector unsigned int c = W_INIT2
97*67e74705SXin Li return __builtin_altivec_crypto_vpermxor(a, b, c);
98*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpermxor
99*67e74705SXin Li }
100*67e74705SXin Li
101*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vpermxord
test_vpermxord(void)102*67e74705SXin Li vector unsigned long long test_vpermxord(void)
103*67e74705SXin Li {
104*67e74705SXin Li vector unsigned long long a = D_INIT1
105*67e74705SXin Li vector unsigned long long b = D_INIT2
106*67e74705SXin Li vector unsigned long long c = D_INIT2
107*67e74705SXin Li return __builtin_altivec_crypto_vpermxor(a, b, c);
108*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpermxor
109*67e74705SXin Li }
110*67e74705SXin Li
111*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcipher
test_vcipher(void)112*67e74705SXin Li vector unsigned long long test_vcipher(void)
113*67e74705SXin Li {
114*67e74705SXin Li vector unsigned long long a = D_INIT1
115*67e74705SXin Li vector unsigned long long b = D_INIT2
116*67e74705SXin Li return __builtin_altivec_crypto_vcipher(a, b);
117*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vcipher
118*67e74705SXin Li }
119*67e74705SXin Li
120*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcipherlast
test_vcipherlast(void)121*67e74705SXin Li vector unsigned long long test_vcipherlast(void)
122*67e74705SXin Li {
123*67e74705SXin Li vector unsigned long long a = D_INIT1
124*67e74705SXin Li vector unsigned long long b = D_INIT2
125*67e74705SXin Li return __builtin_altivec_crypto_vcipherlast(a, b);
126*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vcipherlast
127*67e74705SXin Li }
128*67e74705SXin Li
129*67e74705SXin Li // CHECK-LABEL: @test_vncipher
test_vncipher(void)130*67e74705SXin Li vector unsigned long long test_vncipher(void)
131*67e74705SXin Li {
132*67e74705SXin Li vector unsigned long long a = D_INIT1
133*67e74705SXin Li vector unsigned long long b = D_INIT2
134*67e74705SXin Li return __builtin_altivec_crypto_vncipher(a, b);
135*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vncipher
136*67e74705SXin Li }
137*67e74705SXin Li
138*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vncipherlast
test_vncipherlast(void)139*67e74705SXin Li vector unsigned long long test_vncipherlast(void)
140*67e74705SXin Li {
141*67e74705SXin Li vector unsigned long long a = D_INIT1
142*67e74705SXin Li vector unsigned long long b = D_INIT2
143*67e74705SXin Li return __builtin_altivec_crypto_vncipherlast(a, b);
144*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vncipherlast
145*67e74705SXin Li }
146*67e74705SXin Li
147*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vshasigmaw
test_vshasigmaw(void)148*67e74705SXin Li vector unsigned int test_vshasigmaw(void)
149*67e74705SXin Li {
150*67e74705SXin Li vector unsigned int a = W_INIT1
151*67e74705SXin Li return __builtin_altivec_crypto_vshasigmaw(a, 1, 15);
152*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vshasigmaw
153*67e74705SXin Li }
154*67e74705SXin Li
155*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vshasigmad
test_vshasigmad(void)156*67e74705SXin Li vector unsigned long long test_vshasigmad(void)
157*67e74705SXin Li {
158*67e74705SXin Li vector unsigned long long a = D_INIT2
159*67e74705SXin Li return __builtin_altivec_crypto_vshasigmad(a, 1, 15);
160*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vshasigmad
161*67e74705SXin Li }
162*67e74705SXin Li
163*67e74705SXin Li // Test cases for the builtins the way they are exposed to
164*67e74705SXin Li // users through altivec.h
165*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vpmsumb_e
test_vpmsumb_e(void)166*67e74705SXin Li vector unsigned char test_vpmsumb_e(void)
167*67e74705SXin Li {
168*67e74705SXin Li vector unsigned char a = B_INIT1
169*67e74705SXin Li vector unsigned char b = B_INIT2
170*67e74705SXin Li return __builtin_crypto_vpmsumb(a, b);
171*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpmsumb
172*67e74705SXin Li }
173*67e74705SXin Li
174*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vpmsumh_e
test_vpmsumh_e(void)175*67e74705SXin Li vector unsigned short test_vpmsumh_e(void)
176*67e74705SXin Li {
177*67e74705SXin Li vector unsigned short a = H_INIT1
178*67e74705SXin Li vector unsigned short b = H_INIT2
179*67e74705SXin Li return __builtin_crypto_vpmsumb(a, b);
180*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpmsumh
181*67e74705SXin Li }
182*67e74705SXin Li
183*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vpmsumw_e
test_vpmsumw_e(void)184*67e74705SXin Li vector unsigned int test_vpmsumw_e(void)
185*67e74705SXin Li {
186*67e74705SXin Li vector unsigned int a = W_INIT1
187*67e74705SXin Li vector unsigned int b = W_INIT2
188*67e74705SXin Li return __builtin_crypto_vpmsumb(a, b);
189*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpmsumw
190*67e74705SXin Li }
191*67e74705SXin Li
192*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vpmsumd_e
test_vpmsumd_e(void)193*67e74705SXin Li vector unsigned long long test_vpmsumd_e(void)
194*67e74705SXin Li {
195*67e74705SXin Li vector unsigned long long a = D_INIT1
196*67e74705SXin Li vector unsigned long long b = D_INIT2
197*67e74705SXin Li return __builtin_crypto_vpmsumb(a, b);
198*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpmsumd
199*67e74705SXin Li }
200*67e74705SXin Li
201*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vsbox_e
test_vsbox_e(void)202*67e74705SXin Li vector unsigned long long test_vsbox_e(void)
203*67e74705SXin Li {
204*67e74705SXin Li vector unsigned long long a = D_INIT1
205*67e74705SXin Li return __builtin_crypto_vsbox(a);
206*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vsbox
207*67e74705SXin Li }
208*67e74705SXin Li
209*67e74705SXin Li // CHECK-LABEL: define <16 x i8> @test_vpermxorb_e
test_vpermxorb_e(void)210*67e74705SXin Li vector unsigned char test_vpermxorb_e(void)
211*67e74705SXin Li {
212*67e74705SXin Li vector unsigned char a = B_INIT1
213*67e74705SXin Li vector unsigned char b = B_INIT2
214*67e74705SXin Li vector unsigned char c = B_INIT2
215*67e74705SXin Li return __builtin_crypto_vpermxor(a, b, c);
216*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpermxor
217*67e74705SXin Li }
218*67e74705SXin Li
219*67e74705SXin Li // CHECK-LABEL: define <8 x i16> @test_vpermxorh_e
test_vpermxorh_e(void)220*67e74705SXin Li vector unsigned short test_vpermxorh_e(void)
221*67e74705SXin Li {
222*67e74705SXin Li vector unsigned short a = H_INIT1
223*67e74705SXin Li vector unsigned short b = H_INIT2
224*67e74705SXin Li vector unsigned short c = H_INIT2
225*67e74705SXin Li return __builtin_crypto_vpermxor(a, b, c);
226*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpermxor
227*67e74705SXin Li }
228*67e74705SXin Li
229*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vpermxorw_e
test_vpermxorw_e(void)230*67e74705SXin Li vector unsigned int test_vpermxorw_e(void)
231*67e74705SXin Li {
232*67e74705SXin Li vector unsigned int a = W_INIT1
233*67e74705SXin Li vector unsigned int b = W_INIT2
234*67e74705SXin Li vector unsigned int c = W_INIT2
235*67e74705SXin Li return __builtin_crypto_vpermxor(a, b, c);
236*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpermxor
237*67e74705SXin Li }
238*67e74705SXin Li
239*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vpermxord_e
test_vpermxord_e(void)240*67e74705SXin Li vector unsigned long long test_vpermxord_e(void)
241*67e74705SXin Li {
242*67e74705SXin Li vector unsigned long long a = D_INIT1
243*67e74705SXin Li vector unsigned long long b = D_INIT2
244*67e74705SXin Li vector unsigned long long c = D_INIT2
245*67e74705SXin Li return __builtin_crypto_vpermxor(a, b, c);
246*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpermxor
247*67e74705SXin Li }
248*67e74705SXin Li
249*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcipher_e
test_vcipher_e(void)250*67e74705SXin Li vector unsigned long long test_vcipher_e(void)
251*67e74705SXin Li {
252*67e74705SXin Li vector unsigned long long a = D_INIT1
253*67e74705SXin Li vector unsigned long long b = D_INIT2
254*67e74705SXin Li return __builtin_crypto_vcipher(a, b);
255*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vcipher
256*67e74705SXin Li }
257*67e74705SXin Li
258*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vcipherlast_e
test_vcipherlast_e(void)259*67e74705SXin Li vector unsigned long long test_vcipherlast_e(void)
260*67e74705SXin Li {
261*67e74705SXin Li vector unsigned long long a = D_INIT1
262*67e74705SXin Li vector unsigned long long b = D_INIT2
263*67e74705SXin Li return __builtin_crypto_vcipherlast(a, b);
264*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vcipherlast
265*67e74705SXin Li }
266*67e74705SXin Li
267*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vncipher_e
test_vncipher_e(void)268*67e74705SXin Li vector unsigned long long test_vncipher_e(void)
269*67e74705SXin Li {
270*67e74705SXin Li vector unsigned long long a = D_INIT1
271*67e74705SXin Li vector unsigned long long b = D_INIT2
272*67e74705SXin Li return __builtin_crypto_vncipher(a, b);
273*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vncipher
274*67e74705SXin Li }
275*67e74705SXin Li
276*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vncipherlast_e
test_vncipherlast_e(void)277*67e74705SXin Li vector unsigned long long test_vncipherlast_e(void)
278*67e74705SXin Li {
279*67e74705SXin Li vector unsigned long long a = D_INIT1
280*67e74705SXin Li vector unsigned long long b = D_INIT2
281*67e74705SXin Li return __builtin_crypto_vncipherlast(a, b);
282*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vncipherlast
283*67e74705SXin Li }
284*67e74705SXin Li
285*67e74705SXin Li // CHECK-LABEL: define <4 x i32> @test_vshasigmaw_e
test_vshasigmaw_e(void)286*67e74705SXin Li vector unsigned int test_vshasigmaw_e(void)
287*67e74705SXin Li {
288*67e74705SXin Li vector unsigned int a = W_INIT1
289*67e74705SXin Li return __builtin_crypto_vshasigmaw(a, 1, 15);
290*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vshasigmaw
291*67e74705SXin Li }
292*67e74705SXin Li
293*67e74705SXin Li // CHECK-LABEL: define <2 x i64> @test_vshasigmad_e
test_vshasigmad_e(void)294*67e74705SXin Li vector unsigned long long test_vshasigmad_e(void)
295*67e74705SXin Li {
296*67e74705SXin Li vector unsigned long long a = D_INIT2
297*67e74705SXin Li return __builtin_crypto_vshasigmad(a, 0, 15);
298*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vshasigmad
299*67e74705SXin Li }
300*67e74705SXin Li
301*67e74705SXin Li // CHECK-LABEL: @test_vec_sbox_be
test_vec_sbox_be(void)302*67e74705SXin Li vector unsigned char test_vec_sbox_be(void)
303*67e74705SXin Li {
304*67e74705SXin Li vector unsigned char a = B_INIT1
305*67e74705SXin Li return vec_sbox_be(a);
306*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vsbox
307*67e74705SXin Li }
308*67e74705SXin Li
309*67e74705SXin Li // CHECK-LABEL: @test_vec_cipher_be
test_vec_cipher_be(void)310*67e74705SXin Li vector unsigned char test_vec_cipher_be(void)
311*67e74705SXin Li {
312*67e74705SXin Li vector unsigned char a = B_INIT1
313*67e74705SXin Li vector unsigned char b = B_INIT2
314*67e74705SXin Li return vec_cipher_be(a, b);
315*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vcipher
316*67e74705SXin Li }
317*67e74705SXin Li
318*67e74705SXin Li // CHECK-LABEL: @test_vec_cipherlast_be
test_vec_cipherlast_be(void)319*67e74705SXin Li vector unsigned char test_vec_cipherlast_be(void)
320*67e74705SXin Li {
321*67e74705SXin Li vector unsigned char a = B_INIT1
322*67e74705SXin Li vector unsigned char b = B_INIT2
323*67e74705SXin Li return vec_cipherlast_be(a, b);
324*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vcipherlast
325*67e74705SXin Li }
326*67e74705SXin Li
327*67e74705SXin Li // CHECK-LABEL: @test_vec_ncipher_be
test_vec_ncipher_be(void)328*67e74705SXin Li vector unsigned char test_vec_ncipher_be(void)
329*67e74705SXin Li {
330*67e74705SXin Li vector unsigned char a = B_INIT1
331*67e74705SXin Li vector unsigned char b = B_INIT2
332*67e74705SXin Li return vec_ncipher_be(a, b);
333*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vncipher
334*67e74705SXin Li }
335*67e74705SXin Li
336*67e74705SXin Li // CHECK-LABEL: @test_vec_ncipherlast_be
test_vec_ncipherlast_be(void)337*67e74705SXin Li vector unsigned char test_vec_ncipherlast_be(void)
338*67e74705SXin Li {
339*67e74705SXin Li vector unsigned char a = B_INIT1
340*67e74705SXin Li vector unsigned char b = B_INIT2
341*67e74705SXin Li return vec_ncipherlast_be(a, b);
342*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vncipherlast
343*67e74705SXin Li }
344*67e74705SXin Li
345*67e74705SXin Li // CHECK-LABEL: @test_vec_shasigma_bew
test_vec_shasigma_bew(void)346*67e74705SXin Li vector unsigned int test_vec_shasigma_bew(void)
347*67e74705SXin Li {
348*67e74705SXin Li vector unsigned int a = W_INIT1
349*67e74705SXin Li return vec_shasigma_be(a, 1, 15);
350*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vshasigmaw
351*67e74705SXin Li }
352*67e74705SXin Li
353*67e74705SXin Li // CHECK-LABEL: @test_vec_shasigma_bed
test_vec_shasigma_bed(void)354*67e74705SXin Li vector unsigned long long test_vec_shasigma_bed(void)
355*67e74705SXin Li {
356*67e74705SXin Li vector unsigned long long a = D_INIT2
357*67e74705SXin Li return vec_shasigma_be(a, 1, 15);
358*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vshasigmad
359*67e74705SXin Li }
360*67e74705SXin Li
361*67e74705SXin Li // CHECK-LABEL: @test_vec_pmsum_beb
test_vec_pmsum_beb(void)362*67e74705SXin Li vector unsigned short test_vec_pmsum_beb(void)
363*67e74705SXin Li {
364*67e74705SXin Li vector unsigned char a = B_INIT1
365*67e74705SXin Li vector unsigned char b = B_INIT2
366*67e74705SXin Li return vec_pmsum_be(a, b);
367*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpmsumb
368*67e74705SXin Li }
369*67e74705SXin Li
370*67e74705SXin Li // CHECK-LABEL: @test_vec_pmsum_beh
test_vec_pmsum_beh(void)371*67e74705SXin Li vector unsigned int test_vec_pmsum_beh(void)
372*67e74705SXin Li {
373*67e74705SXin Li vector unsigned short a = H_INIT1
374*67e74705SXin Li vector unsigned short b = H_INIT2
375*67e74705SXin Li return vec_pmsum_be(a, b);
376*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpmsumh
377*67e74705SXin Li }
378*67e74705SXin Li
379*67e74705SXin Li // CHECK-LABEL: @test_vec_pmsum_bew
test_vec_pmsum_bew(void)380*67e74705SXin Li vector unsigned long long test_vec_pmsum_bew(void)
381*67e74705SXin Li {
382*67e74705SXin Li vector unsigned int a = W_INIT1
383*67e74705SXin Li vector unsigned int b = W_INIT2
384*67e74705SXin Li return vec_pmsum_be(a, b);
385*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpmsumw
386*67e74705SXin Li }
387*67e74705SXin Li
388*67e74705SXin Li // CHECK-LABEL: @test_vec_pmsum_bed
test_vec_pmsum_bed(void)389*67e74705SXin Li vector unsigned __int128 test_vec_pmsum_bed(void)
390*67e74705SXin Li {
391*67e74705SXin Li vector unsigned long long a = D_INIT1
392*67e74705SXin Li vector unsigned long long b = D_INIT2
393*67e74705SXin Li return vec_pmsum_be(a, b);
394*67e74705SXin Li // CHECK: @llvm.ppc.altivec.crypto.vpmsumd
395*67e74705SXin Li }
396*67e74705SXin Li
397