xref: /aosp_15_r20/external/llvm/test/CodeGen/SystemZ/vec-intrinsics.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Test vector intrinsics.
2*9880d681SAndroid Build Coastguard Worker;
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.s390.lcbb(i8 *, i32)
6*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vlbb(i8 *, i32)
7*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vll(i32, i8 *)
8*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vpdi(<2 x i64>, <2 x i64>, i32)
9*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vperm(<16 x i8>, <16 x i8>, <16 x i8>)
10*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vpksh(<8 x i16>, <8 x i16>)
11*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vpksf(<4 x i32>, <4 x i32>)
12*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vpksg(<2 x i64>, <2 x i64>)
13*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vpkshs(<8 x i16>, <8 x i16>)
14*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vpksfs(<4 x i32>, <4 x i32>)
15*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vpksgs(<2 x i64>, <2 x i64>)
16*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vpklsh(<8 x i16>, <8 x i16>)
17*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vpklsf(<4 x i32>, <4 x i32>)
18*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vpklsg(<2 x i64>, <2 x i64>)
19*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vpklshs(<8 x i16>, <8 x i16>)
20*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vpklsfs(<4 x i32>, <4 x i32>)
21*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vpklsgs(<2 x i64>, <2 x i64>)
22*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.s390.vstl(<16 x i8>, i32, i8 *)
23*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vuphb(<16 x i8>)
24*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vuphh(<8 x i16>)
25*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vuphf(<4 x i32>)
26*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vuplhb(<16 x i8>)
27*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vuplhh(<8 x i16>)
28*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vuplhf(<4 x i32>)
29*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vuplb(<16 x i8>)
30*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vuplhw(<8 x i16>)
31*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vuplf(<4 x i32>)
32*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vupllb(<16 x i8>)
33*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vupllh(<8 x i16>)
34*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vupllf(<4 x i32>)
35*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vaccb(<16 x i8>, <16 x i8>)
36*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vacch(<8 x i16>, <8 x i16>)
37*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vaccf(<4 x i32>, <4 x i32>)
38*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vaccg(<2 x i64>, <2 x i64>)
39*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vaq(<16 x i8>, <16 x i8>)
40*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vacq(<16 x i8>, <16 x i8>, <16 x i8>)
41*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vaccq(<16 x i8>, <16 x i8>)
42*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vacccq(<16 x i8>, <16 x i8>, <16 x i8>)
43*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vavgb(<16 x i8>, <16 x i8>)
44*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vavgh(<8 x i16>, <8 x i16>)
45*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vavgf(<4 x i32>, <4 x i32>)
46*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vavgg(<2 x i64>, <2 x i64>)
47*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vavglb(<16 x i8>, <16 x i8>)
48*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vavglh(<8 x i16>, <8 x i16>)
49*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vavglf(<4 x i32>, <4 x i32>)
50*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vavglg(<2 x i64>, <2 x i64>)
51*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vcksm(<4 x i32>, <4 x i32>)
52*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vgfmb(<16 x i8>, <16 x i8>)
53*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vgfmh(<8 x i16>, <8 x i16>)
54*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vgfmf(<4 x i32>, <4 x i32>)
55*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vgfmg(<2 x i64>, <2 x i64>)
56*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vgfmab(<16 x i8>, <16 x i8>, <8 x i16>)
57*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vgfmah(<8 x i16>, <8 x i16>, <4 x i32>)
58*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vgfmaf(<4 x i32>, <4 x i32>, <2 x i64>)
59*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vgfmag(<2 x i64>, <2 x i64>, <16 x i8>)
60*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vmahb(<16 x i8>, <16 x i8>, <16 x i8>)
61*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmahh(<8 x i16>, <8 x i16>, <8 x i16>)
62*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmahf(<4 x i32>, <4 x i32>, <4 x i32>)
63*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vmalhb(<16 x i8>, <16 x i8>, <16 x i8>)
64*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmalhh(<8 x i16>, <8 x i16>, <8 x i16>)
65*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmalhf(<4 x i32>, <4 x i32>, <4 x i32>)
66*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmaeb(<16 x i8>, <16 x i8>, <8 x i16>)
67*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmaeh(<8 x i16>, <8 x i16>, <4 x i32>)
68*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmaef(<4 x i32>, <4 x i32>, <2 x i64>)
69*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmaleb(<16 x i8>, <16 x i8>, <8 x i16>)
70*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmaleh(<8 x i16>, <8 x i16>, <4 x i32>)
71*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmalef(<4 x i32>, <4 x i32>, <2 x i64>)
72*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmaob(<16 x i8>, <16 x i8>, <8 x i16>)
73*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmaoh(<8 x i16>, <8 x i16>, <4 x i32>)
74*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmaof(<4 x i32>, <4 x i32>, <2 x i64>)
75*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmalob(<16 x i8>, <16 x i8>, <8 x i16>)
76*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmaloh(<8 x i16>, <8 x i16>, <4 x i32>)
77*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmalof(<4 x i32>, <4 x i32>, <2 x i64>)
78*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vmhb(<16 x i8>, <16 x i8>)
79*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmhh(<8 x i16>, <8 x i16>)
80*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmhf(<4 x i32>, <4 x i32>)
81*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vmlhb(<16 x i8>, <16 x i8>)
82*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmlhh(<8 x i16>, <8 x i16>)
83*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmlhf(<4 x i32>, <4 x i32>)
84*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmeb(<16 x i8>, <16 x i8>)
85*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmeh(<8 x i16>, <8 x i16>)
86*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmef(<4 x i32>, <4 x i32>)
87*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmleb(<16 x i8>, <16 x i8>)
88*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmleh(<8 x i16>, <8 x i16>)
89*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmlef(<4 x i32>, <4 x i32>)
90*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmob(<16 x i8>, <16 x i8>)
91*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmoh(<8 x i16>, <8 x i16>)
92*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmof(<4 x i32>, <4 x i32>)
93*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vmlob(<16 x i8>, <16 x i8>)
94*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vmloh(<8 x i16>, <8 x i16>)
95*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vmlof(<4 x i32>, <4 x i32>)
96*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.verllvb(<16 x i8>, <16 x i8>)
97*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.verllvh(<8 x i16>, <8 x i16>)
98*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.verllvf(<4 x i32>, <4 x i32>)
99*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.verllvg(<2 x i64>, <2 x i64>)
100*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.verllb(<16 x i8>, i32)
101*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.verllh(<8 x i16>, i32)
102*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.verllf(<4 x i32>, i32)
103*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.verllg(<2 x i64>, i32)
104*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.verimb(<16 x i8>, <16 x i8>, <16 x i8>, i32)
105*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.verimh(<8 x i16>, <8 x i16>, <8 x i16>, i32)
106*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.verimf(<4 x i32>, <4 x i32>, <4 x i32>, i32)
107*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.verimg(<2 x i64>, <2 x i64>, <2 x i64>, i32)
108*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsl(<16 x i8>, <16 x i8>)
109*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vslb(<16 x i8>, <16 x i8>)
110*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsra(<16 x i8>, <16 x i8>)
111*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsrab(<16 x i8>, <16 x i8>)
112*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsrl(<16 x i8>, <16 x i8>)
113*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsrlb(<16 x i8>, <16 x i8>)
114*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsldb(<16 x i8>, <16 x i8>, i32)
115*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vscbib(<16 x i8>, <16 x i8>)
116*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vscbih(<8 x i16>, <8 x i16>)
117*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vscbif(<4 x i32>, <4 x i32>)
118*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vscbig(<2 x i64>, <2 x i64>)
119*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsq(<16 x i8>, <16 x i8>)
120*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsbiq(<16 x i8>, <16 x i8>, <16 x i8>)
121*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vscbiq(<16 x i8>, <16 x i8>)
122*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsbcbiq(<16 x i8>, <16 x i8>, <16 x i8>)
123*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vsumb(<16 x i8>, <16 x i8>)
124*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vsumh(<8 x i16>, <8 x i16>)
125*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vsumgh(<8 x i16>, <8 x i16>)
126*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.s390.vsumgf(<4 x i32>, <4 x i32>)
127*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsumqf(<4 x i32>, <4 x i32>)
128*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vsumqg(<2 x i64>, <2 x i64>)
129*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.s390.vtm(<16 x i8>, <16 x i8>)
130*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vceqbs(<16 x i8>, <16 x i8>)
131*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vceqhs(<8 x i16>, <8 x i16>)
132*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vceqfs(<4 x i32>, <4 x i32>)
133*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vceqgs(<2 x i64>, <2 x i64>)
134*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vchbs(<16 x i8>, <16 x i8>)
135*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vchhs(<8 x i16>, <8 x i16>)
136*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vchfs(<4 x i32>, <4 x i32>)
137*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vchgs(<2 x i64>, <2 x i64>)
138*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vchlbs(<16 x i8>, <16 x i8>)
139*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vchlhs(<8 x i16>, <8 x i16>)
140*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vchlfs(<4 x i32>, <4 x i32>)
141*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vchlgs(<2 x i64>, <2 x i64>)
142*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vfaeb(<16 x i8>, <16 x i8>, i32)
143*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vfaeh(<8 x i16>, <8 x i16>, i32)
144*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vfaef(<4 x i32>, <4 x i32>, i32)
145*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vfaebs(<16 x i8>, <16 x i8>, i32)
146*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vfaehs(<8 x i16>, <8 x i16>, i32)
147*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vfaefs(<4 x i32>, <4 x i32>, i32)
148*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vfaezb(<16 x i8>, <16 x i8>, i32)
149*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vfaezh(<8 x i16>, <8 x i16>, i32)
150*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vfaezf(<4 x i32>, <4 x i32>, i32)
151*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vfaezbs(<16 x i8>, <16 x i8>, i32)
152*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vfaezhs(<8 x i16>, <8 x i16>, i32)
153*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vfaezfs(<4 x i32>, <4 x i32>, i32)
154*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vfeeb(<16 x i8>, <16 x i8>)
155*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vfeeh(<8 x i16>, <8 x i16>)
156*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vfeef(<4 x i32>, <4 x i32>)
157*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vfeebs(<16 x i8>, <16 x i8>)
158*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vfeehs(<8 x i16>, <8 x i16>)
159*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vfeefs(<4 x i32>, <4 x i32>)
160*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vfeezb(<16 x i8>, <16 x i8>)
161*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vfeezh(<8 x i16>, <8 x i16>)
162*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vfeezf(<4 x i32>, <4 x i32>)
163*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vfeezbs(<16 x i8>, <16 x i8>)
164*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vfeezhs(<8 x i16>, <8 x i16>)
165*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vfeezfs(<4 x i32>, <4 x i32>)
166*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vfeneb(<16 x i8>, <16 x i8>)
167*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vfeneh(<8 x i16>, <8 x i16>)
168*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vfenef(<4 x i32>, <4 x i32>)
169*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vfenebs(<16 x i8>, <16 x i8>)
170*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vfenehs(<8 x i16>, <8 x i16>)
171*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vfenefs(<4 x i32>, <4 x i32>)
172*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vfenezb(<16 x i8>, <16 x i8>)
173*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vfenezh(<8 x i16>, <8 x i16>)
174*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vfenezf(<4 x i32>, <4 x i32>)
175*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vfenezbs(<16 x i8>, <16 x i8>)
176*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vfenezhs(<8 x i16>, <8 x i16>)
177*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vfenezfs(<4 x i32>, <4 x i32>)
178*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vistrb(<16 x i8>)
179*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vistrh(<8 x i16>)
180*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vistrf(<4 x i32>)
181*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vistrbs(<16 x i8>)
182*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vistrhs(<8 x i16>)
183*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vistrfs(<4 x i32>)
184*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vstrcb(<16 x i8>, <16 x i8>, <16 x i8>, i32)
185*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vstrch(<8 x i16>, <8 x i16>, <8 x i16>, i32)
186*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vstrcf(<4 x i32>, <4 x i32>, <4 x i32>, i32)
187*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vstrcbs(<16 x i8>, <16 x i8>, <16 x i8>,
188*9880d681SAndroid Build Coastguard Worker                                            i32)
189*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vstrchs(<8 x i16>, <8 x i16>, <8 x i16>,
190*9880d681SAndroid Build Coastguard Worker                                            i32)
191*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vstrcfs(<4 x i32>, <4 x i32>, <4 x i32>,
192*9880d681SAndroid Build Coastguard Worker                                            i32)
193*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.s390.vstrczb(<16 x i8>, <16 x i8>, <16 x i8>, i32)
194*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.s390.vstrczh(<8 x i16>, <8 x i16>, <8 x i16>, i32)
195*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.s390.vstrczf(<4 x i32>, <4 x i32>, <4 x i32>, i32)
196*9880d681SAndroid Build Coastguard Workerdeclare {<16 x i8>, i32} @llvm.s390.vstrczbs(<16 x i8>, <16 x i8>, <16 x i8>,
197*9880d681SAndroid Build Coastguard Worker                                             i32)
198*9880d681SAndroid Build Coastguard Workerdeclare {<8 x i16>, i32} @llvm.s390.vstrczhs(<8 x i16>, <8 x i16>, <8 x i16>,
199*9880d681SAndroid Build Coastguard Worker                                             i32)
200*9880d681SAndroid Build Coastguard Workerdeclare {<4 x i32>, i32} @llvm.s390.vstrczfs(<4 x i32>, <4 x i32>, <4 x i32>,
201*9880d681SAndroid Build Coastguard Worker                                             i32)
202*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vfcedbs(<2 x double>, <2 x double>)
203*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vfchdbs(<2 x double>, <2 x double>)
204*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vfchedbs(<2 x double>, <2 x double>)
205*9880d681SAndroid Build Coastguard Workerdeclare {<2 x i64>, i32} @llvm.s390.vftcidb(<2 x double>, i32)
206*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.s390.vfidb(<2 x double>, i32, i32)
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Worker; LCBB with the lowest M3 operand.
209*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lcbb1(i8 *%ptr) {
210*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_lcbb1:
211*9880d681SAndroid Build Coastguard Worker; CHECK: lcbb %r2, 0(%r2), 0
212*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
213*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.s390.lcbb(i8 *%ptr, i32 0)
214*9880d681SAndroid Build Coastguard Worker  ret i32 %res
215*9880d681SAndroid Build Coastguard Worker}
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Worker; LCBB with the highest M3 operand.
218*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lcbb2(i8 *%ptr) {
219*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_lcbb2:
220*9880d681SAndroid Build Coastguard Worker; CHECK: lcbb %r2, 0(%r2), 15
221*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
222*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.s390.lcbb(i8 *%ptr, i32 15)
223*9880d681SAndroid Build Coastguard Worker  ret i32 %res
224*9880d681SAndroid Build Coastguard Worker}
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Worker; LCBB with a displacement and index.
227*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lcbb3(i8 *%base, i64 %index) {
228*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_lcbb3:
229*9880d681SAndroid Build Coastguard Worker; CHECK: lcbb %r2, 4095({{%r2,%r3|%r3,%r2}}), 4
230*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
231*9880d681SAndroid Build Coastguard Worker  %add = add i64 %index, 4095
232*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i8, i8 *%base, i64 %add
233*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.s390.lcbb(i8 *%ptr, i32 4)
234*9880d681SAndroid Build Coastguard Worker  ret i32 %res
235*9880d681SAndroid Build Coastguard Worker}
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Worker; LCBB with an out-of-range displacement.
238*9880d681SAndroid Build Coastguard Workerdefine i32 @test_lcbb4(i8 *%base) {
239*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_lcbb4:
240*9880d681SAndroid Build Coastguard Worker; CHECK: lcbb %r2, 0({{%r[1-5]}}), 5
241*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
242*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i8, i8 *%base, i64 4096
243*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.s390.lcbb(i8 *%ptr, i32 5)
244*9880d681SAndroid Build Coastguard Worker  ret i32 %res
245*9880d681SAndroid Build Coastguard Worker}
246*9880d681SAndroid Build Coastguard Worker
247*9880d681SAndroid Build Coastguard Worker; VLBB with the lowest M3 operand.
248*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vlbb1(i8 *%ptr) {
249*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vlbb1:
250*9880d681SAndroid Build Coastguard Worker; CHECK: vlbb %v24, 0(%r2), 0
251*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
252*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vlbb(i8 *%ptr, i32 0)
253*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
254*9880d681SAndroid Build Coastguard Worker}
255*9880d681SAndroid Build Coastguard Worker
256*9880d681SAndroid Build Coastguard Worker; VLBB with the highest M3 operand.
257*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vlbb2(i8 *%ptr) {
258*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vlbb2:
259*9880d681SAndroid Build Coastguard Worker; CHECK: vlbb %v24, 0(%r2), 15
260*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
261*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vlbb(i8 *%ptr, i32 15)
262*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
263*9880d681SAndroid Build Coastguard Worker}
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Worker; VLBB with a displacement and index.
266*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vlbb3(i8 *%base, i64 %index) {
267*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vlbb3:
268*9880d681SAndroid Build Coastguard Worker; CHECK: vlbb %v24, 4095({{%r2,%r3|%r3,%r2}}), 4
269*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
270*9880d681SAndroid Build Coastguard Worker  %add = add i64 %index, 4095
271*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i8, i8 *%base, i64 %add
272*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vlbb(i8 *%ptr, i32 4)
273*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
274*9880d681SAndroid Build Coastguard Worker}
275*9880d681SAndroid Build Coastguard Worker
276*9880d681SAndroid Build Coastguard Worker; VLBB with an out-of-range displacement.
277*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vlbb4(i8 *%base) {
278*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vlbb4:
279*9880d681SAndroid Build Coastguard Worker; CHECK: vlbb %v24, 0({{%r[1-5]}}), 5
280*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
281*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i8, i8 *%base, i64 4096
282*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vlbb(i8 *%ptr, i32 5)
283*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
284*9880d681SAndroid Build Coastguard Worker}
285*9880d681SAndroid Build Coastguard Worker
286*9880d681SAndroid Build Coastguard Worker; VLL with the lowest in-range displacement.
287*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vll1(i8 *%ptr, i32 %length) {
288*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vll1:
289*9880d681SAndroid Build Coastguard Worker; CHECK: vll %v24, %r3, 0(%r2)
290*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
291*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vll(i32 %length, i8 *%ptr)
292*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
293*9880d681SAndroid Build Coastguard Worker}
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Worker; VLL with the highest in-range displacement.
296*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vll2(i8 *%base, i32 %length) {
297*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vll2:
298*9880d681SAndroid Build Coastguard Worker; CHECK: vll %v24, %r3, 4095(%r2)
299*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
300*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i8, i8 *%base, i64 4095
301*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vll(i32 %length, i8 *%ptr)
302*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
303*9880d681SAndroid Build Coastguard Worker}
304*9880d681SAndroid Build Coastguard Worker
305*9880d681SAndroid Build Coastguard Worker; VLL with an out-of-range displacementa.
306*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vll3(i8 *%base, i32 %length) {
307*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vll3:
308*9880d681SAndroid Build Coastguard Worker; CHECK: vll %v24, %r3, 0({{%r[1-5]}})
309*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
310*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i8, i8 *%base, i64 4096
311*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vll(i32 %length, i8 *%ptr)
312*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
313*9880d681SAndroid Build Coastguard Worker}
314*9880d681SAndroid Build Coastguard Worker
315*9880d681SAndroid Build Coastguard Worker; Check that VLL doesn't allow an index.
316*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vll4(i8 *%base, i64 %index, i32 %length) {
317*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vll4:
318*9880d681SAndroid Build Coastguard Worker; CHECK: vll %v24, %r4, 0({{%r[1-5]}})
319*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
320*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i8, i8 *%base, i64 %index
321*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vll(i32 %length, i8 *%ptr)
322*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
323*9880d681SAndroid Build Coastguard Worker}
324*9880d681SAndroid Build Coastguard Worker
325*9880d681SAndroid Build Coastguard Worker; VPDI taking element 0 from each half.
326*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vpdi1(<2 x i64> %a, <2 x i64> %b) {
327*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpdi1:
328*9880d681SAndroid Build Coastguard Worker; CHECK: vpdi %v24, %v24, %v26, 0
329*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
330*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vpdi(<2 x i64> %a, <2 x i64> %b, i32 0)
331*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
332*9880d681SAndroid Build Coastguard Worker}
333*9880d681SAndroid Build Coastguard Worker
334*9880d681SAndroid Build Coastguard Worker; VPDI taking element 1 from each half.
335*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vpdi2(<2 x i64> %a, <2 x i64> %b) {
336*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpdi2:
337*9880d681SAndroid Build Coastguard Worker; CHECK: vpdi %v24, %v24, %v26, 10
338*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
339*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vpdi(<2 x i64> %a, <2 x i64> %b, i32 10)
340*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
341*9880d681SAndroid Build Coastguard Worker}
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Worker; VPERM.
344*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vperm(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
345*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vperm:
346*9880d681SAndroid Build Coastguard Worker; CHECK: vperm %v24, %v24, %v26, %v28
347*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
348*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vperm(<16 x i8> %a, <16 x i8> %b,
349*9880d681SAndroid Build Coastguard Worker                                         <16 x i8> %c)
350*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
351*9880d681SAndroid Build Coastguard Worker}
352*9880d681SAndroid Build Coastguard Worker
353*9880d681SAndroid Build Coastguard Worker; VPKSH.
354*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpksh(<8 x i16> %a, <8 x i16> %b) {
355*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksh:
356*9880d681SAndroid Build Coastguard Worker; CHECK: vpksh %v24, %v24, %v26
357*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
358*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vpksh(<8 x i16> %a, <8 x i16> %b)
359*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
360*9880d681SAndroid Build Coastguard Worker}
361*9880d681SAndroid Build Coastguard Worker
362*9880d681SAndroid Build Coastguard Worker; VPKSF.
363*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpksf(<4 x i32> %a, <4 x i32> %b) {
364*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksf:
365*9880d681SAndroid Build Coastguard Worker; CHECK: vpksf %v24, %v24, %v26
366*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
367*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vpksf(<4 x i32> %a, <4 x i32> %b)
368*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
369*9880d681SAndroid Build Coastguard Worker}
370*9880d681SAndroid Build Coastguard Worker
371*9880d681SAndroid Build Coastguard Worker; VPKSG.
372*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpksg(<2 x i64> %a, <2 x i64> %b) {
373*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksg:
374*9880d681SAndroid Build Coastguard Worker; CHECK: vpksg %v24, %v24, %v26
375*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
376*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vpksg(<2 x i64> %a, <2 x i64> %b)
377*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
378*9880d681SAndroid Build Coastguard Worker}
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Worker; VPKSHS with no processing of the result.
381*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpkshs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) {
382*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpkshs:
383*9880d681SAndroid Build Coastguard Worker; CHECK: vpkshs %v24, %v24, %v26
384*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
385*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
386*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
387*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
388*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vpkshs(<8 x i16> %a, <8 x i16> %b)
389*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
390*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
391*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
392*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
393*9880d681SAndroid Build Coastguard Worker}
394*9880d681SAndroid Build Coastguard Worker
395*9880d681SAndroid Build Coastguard Worker; VPKSHS, storing to %ptr if all values were saturated.
396*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpkshs_all_store(<8 x i16> %a, <8 x i16> %b, i32 *%ptr) {
397*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpkshs_all_store:
398*9880d681SAndroid Build Coastguard Worker; CHECK: vpkshs %v24, %v24, %v26
399*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14
400*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
401*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
402*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vpkshs(<8 x i16> %a, <8 x i16> %b)
403*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
404*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
405*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge i32 %cc, 3
406*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
407*9880d681SAndroid Build Coastguard Worker
408*9880d681SAndroid Build Coastguard Workerstore:
409*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
410*9880d681SAndroid Build Coastguard Worker  br label %exit
411*9880d681SAndroid Build Coastguard Worker
412*9880d681SAndroid Build Coastguard Workerexit:
413*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
414*9880d681SAndroid Build Coastguard Worker}
415*9880d681SAndroid Build Coastguard Worker
416*9880d681SAndroid Build Coastguard Worker; VPKSFS with no processing of the result.
417*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpksfs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) {
418*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksfs:
419*9880d681SAndroid Build Coastguard Worker; CHECK: vpksfs %v24, %v24, %v26
420*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
421*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
422*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
423*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
424*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vpksfs(<4 x i32> %a, <4 x i32> %b)
425*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
426*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
427*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
428*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
429*9880d681SAndroid Build Coastguard Worker}
430*9880d681SAndroid Build Coastguard Worker
431*9880d681SAndroid Build Coastguard Worker; VPKSFS, storing to %ptr if any values were saturated.
432*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpksfs_any_store(<4 x i32> %a, <4 x i32> %b, i32 *%ptr) {
433*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksfs_any_store:
434*9880d681SAndroid Build Coastguard Worker; CHECK: vpksfs %v24, %v24, %v26
435*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bher|ber}} %r14
436*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
437*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
438*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vpksfs(<4 x i32> %a, <4 x i32> %b)
439*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
440*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
441*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt i32 %cc, 0
442*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
443*9880d681SAndroid Build Coastguard Worker
444*9880d681SAndroid Build Coastguard Workerstore:
445*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
446*9880d681SAndroid Build Coastguard Worker  br label %exit
447*9880d681SAndroid Build Coastguard Worker
448*9880d681SAndroid Build Coastguard Workerexit:
449*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
450*9880d681SAndroid Build Coastguard Worker}
451*9880d681SAndroid Build Coastguard Worker
452*9880d681SAndroid Build Coastguard Worker; VPKSGS with no processing of the result.
453*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpksgs(<2 x i64> %a, <2 x i64> %b, i32 *%ccptr) {
454*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksgs:
455*9880d681SAndroid Build Coastguard Worker; CHECK: vpksgs %v24, %v24, %v26
456*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
457*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
458*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
459*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
460*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vpksgs(<2 x i64> %a, <2 x i64> %b)
461*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
462*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
463*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
464*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
465*9880d681SAndroid Build Coastguard Worker}
466*9880d681SAndroid Build Coastguard Worker
467*9880d681SAndroid Build Coastguard Worker; VPKSGS, storing to %ptr if no elements were saturated
468*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpksgs_none_store(<2 x i64> %a, <2 x i64> %b,
469*9880d681SAndroid Build Coastguard Worker                                         i32 *%ptr) {
470*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpksgs_none_store:
471*9880d681SAndroid Build Coastguard Worker; CHECK: vpksgs %v24, %v24, %v26
472*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnher|bner}} %r14
473*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
474*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
475*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vpksgs(<2 x i64> %a, <2 x i64> %b)
476*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
477*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
478*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sle i32 %cc, 0
479*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
480*9880d681SAndroid Build Coastguard Worker
481*9880d681SAndroid Build Coastguard Workerstore:
482*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
483*9880d681SAndroid Build Coastguard Worker  br label %exit
484*9880d681SAndroid Build Coastguard Worker
485*9880d681SAndroid Build Coastguard Workerexit:
486*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
487*9880d681SAndroid Build Coastguard Worker}
488*9880d681SAndroid Build Coastguard Worker
489*9880d681SAndroid Build Coastguard Worker; VPKLSH.
490*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpklsh(<8 x i16> %a, <8 x i16> %b) {
491*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsh:
492*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsh %v24, %v24, %v26
493*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
494*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vpklsh(<8 x i16> %a, <8 x i16> %b)
495*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
496*9880d681SAndroid Build Coastguard Worker}
497*9880d681SAndroid Build Coastguard Worker
498*9880d681SAndroid Build Coastguard Worker; VPKLSF.
499*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpklsf(<4 x i32> %a, <4 x i32> %b) {
500*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsf:
501*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsf %v24, %v24, %v26
502*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
503*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vpklsf(<4 x i32> %a, <4 x i32> %b)
504*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
505*9880d681SAndroid Build Coastguard Worker}
506*9880d681SAndroid Build Coastguard Worker
507*9880d681SAndroid Build Coastguard Worker; VPKLSG.
508*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpklsg(<2 x i64> %a, <2 x i64> %b) {
509*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsg:
510*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsg %v24, %v24, %v26
511*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
512*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vpklsg(<2 x i64> %a, <2 x i64> %b)
513*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
514*9880d681SAndroid Build Coastguard Worker}
515*9880d681SAndroid Build Coastguard Worker
516*9880d681SAndroid Build Coastguard Worker; VPKLSHS with no processing of the result.
517*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpklshs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) {
518*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklshs:
519*9880d681SAndroid Build Coastguard Worker; CHECK: vpklshs %v24, %v24, %v26
520*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
521*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
522*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
523*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
524*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vpklshs(<8 x i16> %a, <8 x i16> %b)
525*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
526*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
527*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
528*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
529*9880d681SAndroid Build Coastguard Worker}
530*9880d681SAndroid Build Coastguard Worker
531*9880d681SAndroid Build Coastguard Worker; VPKLSHS, storing to %ptr if all values were saturated.
532*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpklshs_all_store(<8 x i16> %a, <8 x i16> %b,
533*9880d681SAndroid Build Coastguard Worker                                         i32 *%ptr) {
534*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklshs_all_store:
535*9880d681SAndroid Build Coastguard Worker; CHECK: vpklshs %v24, %v24, %v26
536*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14
537*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
538*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
539*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vpklshs(<8 x i16> %a, <8 x i16> %b)
540*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
541*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
542*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %cc, 3
543*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
544*9880d681SAndroid Build Coastguard Worker
545*9880d681SAndroid Build Coastguard Workerstore:
546*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
547*9880d681SAndroid Build Coastguard Worker  br label %exit
548*9880d681SAndroid Build Coastguard Worker
549*9880d681SAndroid Build Coastguard Workerexit:
550*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
551*9880d681SAndroid Build Coastguard Worker}
552*9880d681SAndroid Build Coastguard Worker
553*9880d681SAndroid Build Coastguard Worker; VPKLSFS with no processing of the result.
554*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpklsfs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) {
555*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsfs:
556*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsfs %v24, %v24, %v26
557*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
558*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
559*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
560*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
561*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vpklsfs(<4 x i32> %a, <4 x i32> %b)
562*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
563*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
564*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
565*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
566*9880d681SAndroid Build Coastguard Worker}
567*9880d681SAndroid Build Coastguard Worker
568*9880d681SAndroid Build Coastguard Worker; VPKLSFS, storing to %ptr if any values were saturated.
569*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpklsfs_any_store(<4 x i32> %a, <4 x i32> %b,
570*9880d681SAndroid Build Coastguard Worker                                         i32 *%ptr) {
571*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsfs_any_store:
572*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsfs %v24, %v24, %v26
573*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bher|ber}} %r14
574*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
575*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
576*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vpklsfs(<4 x i32> %a, <4 x i32> %b)
577*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
578*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
579*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ne i32 %cc, 0
580*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
581*9880d681SAndroid Build Coastguard Worker
582*9880d681SAndroid Build Coastguard Workerstore:
583*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
584*9880d681SAndroid Build Coastguard Worker  br label %exit
585*9880d681SAndroid Build Coastguard Worker
586*9880d681SAndroid Build Coastguard Workerexit:
587*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
588*9880d681SAndroid Build Coastguard Worker}
589*9880d681SAndroid Build Coastguard Worker
590*9880d681SAndroid Build Coastguard Worker; VPKLSGS with no processing of the result.
591*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpklsgs(<2 x i64> %a, <2 x i64> %b, i32 *%ccptr) {
592*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsgs:
593*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsgs %v24, %v24, %v26
594*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
595*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
596*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
597*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
598*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vpklsgs(<2 x i64> %a, <2 x i64> %b)
599*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
600*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
601*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
602*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
603*9880d681SAndroid Build Coastguard Worker}
604*9880d681SAndroid Build Coastguard Worker
605*9880d681SAndroid Build Coastguard Worker; VPKLSGS, storing to %ptr if no elements were saturated
606*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpklsgs_none_store(<2 x i64> %a, <2 x i64> %b,
607*9880d681SAndroid Build Coastguard Worker                                          i32 *%ptr) {
608*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vpklsgs_none_store:
609*9880d681SAndroid Build Coastguard Worker; CHECK: vpklsgs %v24, %v24, %v26
610*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnher|bner}} %r14
611*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
612*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
613*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vpklsgs(<2 x i64> %a, <2 x i64> %b)
614*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
615*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
616*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %cc, 0
617*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
618*9880d681SAndroid Build Coastguard Worker
619*9880d681SAndroid Build Coastguard Workerstore:
620*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
621*9880d681SAndroid Build Coastguard Worker  br label %exit
622*9880d681SAndroid Build Coastguard Worker
623*9880d681SAndroid Build Coastguard Workerexit:
624*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
625*9880d681SAndroid Build Coastguard Worker}
626*9880d681SAndroid Build Coastguard Worker
627*9880d681SAndroid Build Coastguard Worker; VSTL with the lowest in-range displacement.
628*9880d681SAndroid Build Coastguard Workerdefine void @test_vstl1(<16 x i8> %vec, i8 *%ptr, i32 %length) {
629*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstl1:
630*9880d681SAndroid Build Coastguard Worker; CHECK: vstl %v24, %r3, 0(%r2)
631*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
632*9880d681SAndroid Build Coastguard Worker  call void @llvm.s390.vstl(<16 x i8> %vec, i32 %length, i8 *%ptr)
633*9880d681SAndroid Build Coastguard Worker  ret void
634*9880d681SAndroid Build Coastguard Worker}
635*9880d681SAndroid Build Coastguard Worker
636*9880d681SAndroid Build Coastguard Worker; VSTL with the highest in-range displacement.
637*9880d681SAndroid Build Coastguard Workerdefine void @test_vstl2(<16 x i8> %vec, i8 *%base, i32 %length) {
638*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstl2:
639*9880d681SAndroid Build Coastguard Worker; CHECK: vstl %v24, %r3, 4095(%r2)
640*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
641*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i8, i8 *%base, i64 4095
642*9880d681SAndroid Build Coastguard Worker  call void @llvm.s390.vstl(<16 x i8> %vec, i32 %length, i8 *%ptr)
643*9880d681SAndroid Build Coastguard Worker  ret void
644*9880d681SAndroid Build Coastguard Worker}
645*9880d681SAndroid Build Coastguard Worker
646*9880d681SAndroid Build Coastguard Worker; VSTL with an out-of-range displacement.
647*9880d681SAndroid Build Coastguard Workerdefine void @test_vstl3(<16 x i8> %vec, i8 *%base, i32 %length) {
648*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstl3:
649*9880d681SAndroid Build Coastguard Worker; CHECK: vstl %v24, %r3, 0({{%r[1-5]}})
650*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
651*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i8, i8 *%base, i64 4096
652*9880d681SAndroid Build Coastguard Worker  call void @llvm.s390.vstl(<16 x i8> %vec, i32 %length, i8 *%ptr)
653*9880d681SAndroid Build Coastguard Worker  ret void
654*9880d681SAndroid Build Coastguard Worker}
655*9880d681SAndroid Build Coastguard Worker
656*9880d681SAndroid Build Coastguard Worker; Check that VSTL doesn't allow an index.
657*9880d681SAndroid Build Coastguard Workerdefine void @test_vstl4(<16 x i8> %vec, i8 *%base, i64 %index, i32 %length) {
658*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstl4:
659*9880d681SAndroid Build Coastguard Worker; CHECK: vstl %v24, %r4, 0({{%r[1-5]}})
660*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
661*9880d681SAndroid Build Coastguard Worker  %ptr = getelementptr i8, i8 *%base, i64 %index
662*9880d681SAndroid Build Coastguard Worker  call void @llvm.s390.vstl(<16 x i8> %vec, i32 %length, i8 *%ptr)
663*9880d681SAndroid Build Coastguard Worker  ret void
664*9880d681SAndroid Build Coastguard Worker}
665*9880d681SAndroid Build Coastguard Worker
666*9880d681SAndroid Build Coastguard Worker; VUPHB.
667*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vuphb(<16 x i8> %a) {
668*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuphb:
669*9880d681SAndroid Build Coastguard Worker; CHECK: vuphb %v24, %v24
670*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
671*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vuphb(<16 x i8> %a)
672*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
673*9880d681SAndroid Build Coastguard Worker}
674*9880d681SAndroid Build Coastguard Worker
675*9880d681SAndroid Build Coastguard Worker; VUPHH.
676*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vuphh(<8 x i16> %a) {
677*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuphh:
678*9880d681SAndroid Build Coastguard Worker; CHECK: vuphh %v24, %v24
679*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
680*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vuphh(<8 x i16> %a)
681*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
682*9880d681SAndroid Build Coastguard Worker}
683*9880d681SAndroid Build Coastguard Worker
684*9880d681SAndroid Build Coastguard Worker; VUPHF.
685*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vuphf(<4 x i32> %a) {
686*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuphf:
687*9880d681SAndroid Build Coastguard Worker; CHECK: vuphf %v24, %v24
688*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
689*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vuphf(<4 x i32> %a)
690*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
691*9880d681SAndroid Build Coastguard Worker}
692*9880d681SAndroid Build Coastguard Worker
693*9880d681SAndroid Build Coastguard Worker; VUPLHB.
694*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vuplhb(<16 x i8> %a) {
695*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuplhb:
696*9880d681SAndroid Build Coastguard Worker; CHECK: vuplhb %v24, %v24
697*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
698*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vuplhb(<16 x i8> %a)
699*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
700*9880d681SAndroid Build Coastguard Worker}
701*9880d681SAndroid Build Coastguard Worker
702*9880d681SAndroid Build Coastguard Worker; VUPLHH.
703*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vuplhh(<8 x i16> %a) {
704*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuplhh:
705*9880d681SAndroid Build Coastguard Worker; CHECK: vuplhh %v24, %v24
706*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
707*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vuplhh(<8 x i16> %a)
708*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
709*9880d681SAndroid Build Coastguard Worker}
710*9880d681SAndroid Build Coastguard Worker
711*9880d681SAndroid Build Coastguard Worker; VUPLHF.
712*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vuplhf(<4 x i32> %a) {
713*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuplhf:
714*9880d681SAndroid Build Coastguard Worker; CHECK: vuplhf %v24, %v24
715*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
716*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vuplhf(<4 x i32> %a)
717*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
718*9880d681SAndroid Build Coastguard Worker}
719*9880d681SAndroid Build Coastguard Worker
720*9880d681SAndroid Build Coastguard Worker; VUPLB.
721*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vuplb(<16 x i8> %a) {
722*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuplb:
723*9880d681SAndroid Build Coastguard Worker; CHECK: vuplb %v24, %v24
724*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
725*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vuplb(<16 x i8> %a)
726*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
727*9880d681SAndroid Build Coastguard Worker}
728*9880d681SAndroid Build Coastguard Worker
729*9880d681SAndroid Build Coastguard Worker; VUPLHW.
730*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vuplhw(<8 x i16> %a) {
731*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuplhw:
732*9880d681SAndroid Build Coastguard Worker; CHECK: vuplhw %v24, %v24
733*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
734*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vuplhw(<8 x i16> %a)
735*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
736*9880d681SAndroid Build Coastguard Worker}
737*9880d681SAndroid Build Coastguard Worker
738*9880d681SAndroid Build Coastguard Worker; VUPLF.
739*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vuplf(<4 x i32> %a) {
740*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vuplf:
741*9880d681SAndroid Build Coastguard Worker; CHECK: vuplf %v24, %v24
742*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
743*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vuplf(<4 x i32> %a)
744*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
745*9880d681SAndroid Build Coastguard Worker}
746*9880d681SAndroid Build Coastguard Worker
747*9880d681SAndroid Build Coastguard Worker; VUPLLB.
748*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vupllb(<16 x i8> %a) {
749*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vupllb:
750*9880d681SAndroid Build Coastguard Worker; CHECK: vupllb %v24, %v24
751*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
752*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vupllb(<16 x i8> %a)
753*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
754*9880d681SAndroid Build Coastguard Worker}
755*9880d681SAndroid Build Coastguard Worker
756*9880d681SAndroid Build Coastguard Worker; VUPLLH.
757*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vupllh(<8 x i16> %a) {
758*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vupllh:
759*9880d681SAndroid Build Coastguard Worker; CHECK: vupllh %v24, %v24
760*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
761*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vupllh(<8 x i16> %a)
762*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
763*9880d681SAndroid Build Coastguard Worker}
764*9880d681SAndroid Build Coastguard Worker
765*9880d681SAndroid Build Coastguard Worker; VUPLLF.
766*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vupllf(<4 x i32> %a) {
767*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vupllf:
768*9880d681SAndroid Build Coastguard Worker; CHECK: vupllf %v24, %v24
769*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
770*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vupllf(<4 x i32> %a)
771*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
772*9880d681SAndroid Build Coastguard Worker}
773*9880d681SAndroid Build Coastguard Worker
774*9880d681SAndroid Build Coastguard Worker; VACCB.
775*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vaccb(<16 x i8> %a, <16 x i8> %b) {
776*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaccb:
777*9880d681SAndroid Build Coastguard Worker; CHECK: vaccb %v24, %v24, %v26
778*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
779*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vaccb(<16 x i8> %a, <16 x i8> %b)
780*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
781*9880d681SAndroid Build Coastguard Worker}
782*9880d681SAndroid Build Coastguard Worker
783*9880d681SAndroid Build Coastguard Worker; VACCH.
784*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vacch(<8 x i16> %a, <8 x i16> %b) {
785*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vacch:
786*9880d681SAndroid Build Coastguard Worker; CHECK: vacch %v24, %v24, %v26
787*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
788*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vacch(<8 x i16> %a, <8 x i16> %b)
789*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
790*9880d681SAndroid Build Coastguard Worker}
791*9880d681SAndroid Build Coastguard Worker
792*9880d681SAndroid Build Coastguard Worker; VACCF.
793*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vaccf(<4 x i32> %a, <4 x i32> %b) {
794*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaccf:
795*9880d681SAndroid Build Coastguard Worker; CHECK: vaccf %v24, %v24, %v26
796*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
797*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vaccf(<4 x i32> %a, <4 x i32> %b)
798*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
799*9880d681SAndroid Build Coastguard Worker}
800*9880d681SAndroid Build Coastguard Worker
801*9880d681SAndroid Build Coastguard Worker; VACCG.
802*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vaccg(<2 x i64> %a, <2 x i64> %b) {
803*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaccg:
804*9880d681SAndroid Build Coastguard Worker; CHECK: vaccg %v24, %v24, %v26
805*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
806*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vaccg(<2 x i64> %a, <2 x i64> %b)
807*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
808*9880d681SAndroid Build Coastguard Worker}
809*9880d681SAndroid Build Coastguard Worker
810*9880d681SAndroid Build Coastguard Worker; VAQ.
811*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vaq(<16 x i8> %a, <16 x i8> %b) {
812*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaq:
813*9880d681SAndroid Build Coastguard Worker; CHECK: vaq %v24, %v24, %v26
814*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
815*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vaq(<16 x i8> %a, <16 x i8> %b)
816*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
817*9880d681SAndroid Build Coastguard Worker}
818*9880d681SAndroid Build Coastguard Worker
819*9880d681SAndroid Build Coastguard Worker; VACQ.
820*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vacq(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
821*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vacq:
822*9880d681SAndroid Build Coastguard Worker; CHECK: vacq %v24, %v24, %v26, %v28
823*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
824*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vacq(<16 x i8> %a, <16 x i8> %b,
825*9880d681SAndroid Build Coastguard Worker                                        <16 x i8> %c)
826*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
827*9880d681SAndroid Build Coastguard Worker}
828*9880d681SAndroid Build Coastguard Worker
829*9880d681SAndroid Build Coastguard Worker; VACCQ.
830*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vaccq(<16 x i8> %a, <16 x i8> %b) {
831*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vaccq:
832*9880d681SAndroid Build Coastguard Worker; CHECK: vaccq %v24, %v24, %v26
833*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
834*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vaccq(<16 x i8> %a, <16 x i8> %b)
835*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
836*9880d681SAndroid Build Coastguard Worker}
837*9880d681SAndroid Build Coastguard Worker
838*9880d681SAndroid Build Coastguard Worker; VACCCQ.
839*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vacccq(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
840*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vacccq:
841*9880d681SAndroid Build Coastguard Worker; CHECK: vacccq %v24, %v24, %v26, %v28
842*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
843*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vacccq(<16 x i8> %a, <16 x i8> %b,
844*9880d681SAndroid Build Coastguard Worker                                          <16 x i8> %c)
845*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
846*9880d681SAndroid Build Coastguard Worker}
847*9880d681SAndroid Build Coastguard Worker
848*9880d681SAndroid Build Coastguard Worker; VAVGB.
849*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vavgb(<16 x i8> %a, <16 x i8> %b) {
850*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavgb:
851*9880d681SAndroid Build Coastguard Worker; CHECK: vavgb %v24, %v24, %v26
852*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
853*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vavgb(<16 x i8> %a, <16 x i8> %b)
854*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
855*9880d681SAndroid Build Coastguard Worker}
856*9880d681SAndroid Build Coastguard Worker
857*9880d681SAndroid Build Coastguard Worker; VAVGH.
858*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vavgh(<8 x i16> %a, <8 x i16> %b) {
859*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavgh:
860*9880d681SAndroid Build Coastguard Worker; CHECK: vavgh %v24, %v24, %v26
861*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
862*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vavgh(<8 x i16> %a, <8 x i16> %b)
863*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
864*9880d681SAndroid Build Coastguard Worker}
865*9880d681SAndroid Build Coastguard Worker
866*9880d681SAndroid Build Coastguard Worker; VAVGF.
867*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vavgf(<4 x i32> %a, <4 x i32> %b) {
868*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavgf:
869*9880d681SAndroid Build Coastguard Worker; CHECK: vavgf %v24, %v24, %v26
870*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
871*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vavgf(<4 x i32> %a, <4 x i32> %b)
872*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
873*9880d681SAndroid Build Coastguard Worker}
874*9880d681SAndroid Build Coastguard Worker
875*9880d681SAndroid Build Coastguard Worker; VAVGG.
876*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vavgg(<2 x i64> %a, <2 x i64> %b) {
877*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavgg:
878*9880d681SAndroid Build Coastguard Worker; CHECK: vavgg %v24, %v24, %v26
879*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
880*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vavgg(<2 x i64> %a, <2 x i64> %b)
881*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
882*9880d681SAndroid Build Coastguard Worker}
883*9880d681SAndroid Build Coastguard Worker
884*9880d681SAndroid Build Coastguard Worker; VAVGLB.
885*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vavglb(<16 x i8> %a, <16 x i8> %b) {
886*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavglb:
887*9880d681SAndroid Build Coastguard Worker; CHECK: vavglb %v24, %v24, %v26
888*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
889*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vavglb(<16 x i8> %a, <16 x i8> %b)
890*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
891*9880d681SAndroid Build Coastguard Worker}
892*9880d681SAndroid Build Coastguard Worker
893*9880d681SAndroid Build Coastguard Worker; VAVGLH.
894*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vavglh(<8 x i16> %a, <8 x i16> %b) {
895*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavglh:
896*9880d681SAndroid Build Coastguard Worker; CHECK: vavglh %v24, %v24, %v26
897*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
898*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vavglh(<8 x i16> %a, <8 x i16> %b)
899*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
900*9880d681SAndroid Build Coastguard Worker}
901*9880d681SAndroid Build Coastguard Worker
902*9880d681SAndroid Build Coastguard Worker; VAVGLF.
903*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vavglf(<4 x i32> %a, <4 x i32> %b) {
904*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavglf:
905*9880d681SAndroid Build Coastguard Worker; CHECK: vavglf %v24, %v24, %v26
906*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
907*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vavglf(<4 x i32> %a, <4 x i32> %b)
908*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
909*9880d681SAndroid Build Coastguard Worker}
910*9880d681SAndroid Build Coastguard Worker
911*9880d681SAndroid Build Coastguard Worker; VAVGLG.
912*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vavglg(<2 x i64> %a, <2 x i64> %b) {
913*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vavglg:
914*9880d681SAndroid Build Coastguard Worker; CHECK: vavglg %v24, %v24, %v26
915*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
916*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vavglg(<2 x i64> %a, <2 x i64> %b)
917*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
918*9880d681SAndroid Build Coastguard Worker}
919*9880d681SAndroid Build Coastguard Worker
920*9880d681SAndroid Build Coastguard Worker; VCKSM.
921*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vcksm(<4 x i32> %a, <4 x i32> %b) {
922*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vcksm:
923*9880d681SAndroid Build Coastguard Worker; CHECK: vcksm %v24, %v24, %v26
924*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
925*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vcksm(<4 x i32> %a, <4 x i32> %b)
926*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
927*9880d681SAndroid Build Coastguard Worker}
928*9880d681SAndroid Build Coastguard Worker
929*9880d681SAndroid Build Coastguard Worker; VGFMB.
930*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vgfmb(<16 x i8> %a, <16 x i8> %b) {
931*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmb:
932*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmb %v24, %v24, %v26
933*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
934*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vgfmb(<16 x i8> %a, <16 x i8> %b)
935*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
936*9880d681SAndroid Build Coastguard Worker}
937*9880d681SAndroid Build Coastguard Worker
938*9880d681SAndroid Build Coastguard Worker; VGFMH.
939*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vgfmh(<8 x i16> %a, <8 x i16> %b) {
940*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmh:
941*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmh %v24, %v24, %v26
942*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
943*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vgfmh(<8 x i16> %a, <8 x i16> %b)
944*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
945*9880d681SAndroid Build Coastguard Worker}
946*9880d681SAndroid Build Coastguard Worker
947*9880d681SAndroid Build Coastguard Worker; VGFMF.
948*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vgfmf(<4 x i32> %a, <4 x i32> %b) {
949*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmf:
950*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmf %v24, %v24, %v26
951*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
952*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vgfmf(<4 x i32> %a, <4 x i32> %b)
953*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
954*9880d681SAndroid Build Coastguard Worker}
955*9880d681SAndroid Build Coastguard Worker
956*9880d681SAndroid Build Coastguard Worker; VGFMG.
957*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vgfmg(<2 x i64> %a, <2 x i64> %b) {
958*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmg:
959*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmg %v24, %v24, %v26
960*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
961*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vgfmg(<2 x i64> %a, <2 x i64> %b)
962*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
963*9880d681SAndroid Build Coastguard Worker}
964*9880d681SAndroid Build Coastguard Worker
965*9880d681SAndroid Build Coastguard Worker; VGFMAB.
966*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vgfmab(<16 x i8> %a, <16 x i8> %b, <8 x i16> %c) {
967*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmab:
968*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmab %v24, %v24, %v26, %v28
969*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
970*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vgfmab(<16 x i8> %a, <16 x i8> %b,
971*9880d681SAndroid Build Coastguard Worker                                          <8 x i16> %c)
972*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
973*9880d681SAndroid Build Coastguard Worker}
974*9880d681SAndroid Build Coastguard Worker
975*9880d681SAndroid Build Coastguard Worker; VGFMAH.
976*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vgfmah(<8 x i16> %a, <8 x i16> %b, <4 x i32> %c) {
977*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmah:
978*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmah %v24, %v24, %v26, %v28
979*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
980*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vgfmah(<8 x i16> %a, <8 x i16> %b,
981*9880d681SAndroid Build Coastguard Worker                                          <4 x i32> %c)
982*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
983*9880d681SAndroid Build Coastguard Worker}
984*9880d681SAndroid Build Coastguard Worker
985*9880d681SAndroid Build Coastguard Worker; VGFMAF.
986*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vgfmaf(<4 x i32> %a, <4 x i32> %b, <2 x i64> %c) {
987*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmaf:
988*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmaf %v24, %v24, %v26, %v28
989*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
990*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vgfmaf(<4 x i32> %a, <4 x i32> %b,
991*9880d681SAndroid Build Coastguard Worker                                          <2 x i64> %c)
992*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
993*9880d681SAndroid Build Coastguard Worker}
994*9880d681SAndroid Build Coastguard Worker
995*9880d681SAndroid Build Coastguard Worker; VGFMAG.
996*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vgfmag(<2 x i64> %a, <2 x i64> %b, <16 x i8> %c) {
997*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vgfmag:
998*9880d681SAndroid Build Coastguard Worker; CHECK: vgfmag %v24, %v24, %v26, %v28
999*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1000*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vgfmag(<2 x i64> %a, <2 x i64> %b,
1001*9880d681SAndroid Build Coastguard Worker                                          <16 x i8> %c)
1002*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1003*9880d681SAndroid Build Coastguard Worker}
1004*9880d681SAndroid Build Coastguard Worker
1005*9880d681SAndroid Build Coastguard Worker; VMAHB.
1006*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vmahb(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
1007*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmahb:
1008*9880d681SAndroid Build Coastguard Worker; CHECK: vmahb %v24, %v24, %v26, %v28
1009*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1010*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vmahb(<16 x i8> %a, <16 x i8> %b,
1011*9880d681SAndroid Build Coastguard Worker                                         <16 x i8> %c)
1012*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1013*9880d681SAndroid Build Coastguard Worker}
1014*9880d681SAndroid Build Coastguard Worker
1015*9880d681SAndroid Build Coastguard Worker; VMAHH.
1016*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmahh(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {
1017*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmahh:
1018*9880d681SAndroid Build Coastguard Worker; CHECK: vmahh %v24, %v24, %v26, %v28
1019*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1020*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vmahh(<8 x i16> %a, <8 x i16> %b,
1021*9880d681SAndroid Build Coastguard Worker                                         <8 x i16> %c)
1022*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1023*9880d681SAndroid Build Coastguard Worker}
1024*9880d681SAndroid Build Coastguard Worker
1025*9880d681SAndroid Build Coastguard Worker; VMAHF.
1026*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmahf(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
1027*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmahf:
1028*9880d681SAndroid Build Coastguard Worker; CHECK: vmahf %v24, %v24, %v26, %v28
1029*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1030*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vmahf(<4 x i32> %a, <4 x i32> %b,
1031*9880d681SAndroid Build Coastguard Worker                                         <4 x i32> %c)
1032*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1033*9880d681SAndroid Build Coastguard Worker}
1034*9880d681SAndroid Build Coastguard Worker
1035*9880d681SAndroid Build Coastguard Worker; VMALHB.
1036*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vmalhb(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
1037*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmalhb:
1038*9880d681SAndroid Build Coastguard Worker; CHECK: vmalhb %v24, %v24, %v26, %v28
1039*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1040*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vmalhb(<16 x i8> %a, <16 x i8> %b,
1041*9880d681SAndroid Build Coastguard Worker                                          <16 x i8> %c)
1042*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1043*9880d681SAndroid Build Coastguard Worker}
1044*9880d681SAndroid Build Coastguard Worker
1045*9880d681SAndroid Build Coastguard Worker; VMALHH.
1046*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmalhh(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {
1047*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmalhh:
1048*9880d681SAndroid Build Coastguard Worker; CHECK: vmalhh %v24, %v24, %v26, %v28
1049*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1050*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vmalhh(<8 x i16> %a, <8 x i16> %b,
1051*9880d681SAndroid Build Coastguard Worker                                          <8 x i16> %c)
1052*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1053*9880d681SAndroid Build Coastguard Worker}
1054*9880d681SAndroid Build Coastguard Worker
1055*9880d681SAndroid Build Coastguard Worker; VMALHF.
1056*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmalhf(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
1057*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmalhf:
1058*9880d681SAndroid Build Coastguard Worker; CHECK: vmalhf %v24, %v24, %v26, %v28
1059*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1060*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vmalhf(<4 x i32> %a, <4 x i32> %b,
1061*9880d681SAndroid Build Coastguard Worker                                          <4 x i32> %c)
1062*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1063*9880d681SAndroid Build Coastguard Worker}
1064*9880d681SAndroid Build Coastguard Worker
1065*9880d681SAndroid Build Coastguard Worker; VMAEB.
1066*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmaeb(<16 x i8> %a, <16 x i8> %b, <8 x i16> %c) {
1067*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaeb:
1068*9880d681SAndroid Build Coastguard Worker; CHECK: vmaeb %v24, %v24, %v26, %v28
1069*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1070*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vmaeb(<16 x i8> %a, <16 x i8> %b,
1071*9880d681SAndroid Build Coastguard Worker                                         <8 x i16> %c)
1072*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1073*9880d681SAndroid Build Coastguard Worker}
1074*9880d681SAndroid Build Coastguard Worker
1075*9880d681SAndroid Build Coastguard Worker; VMAEH.
1076*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmaeh(<8 x i16> %a, <8 x i16> %b, <4 x i32> %c) {
1077*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaeh:
1078*9880d681SAndroid Build Coastguard Worker; CHECK: vmaeh %v24, %v24, %v26, %v28
1079*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1080*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vmaeh(<8 x i16> %a, <8 x i16> %b,
1081*9880d681SAndroid Build Coastguard Worker                                         <4 x i32> %c)
1082*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1083*9880d681SAndroid Build Coastguard Worker}
1084*9880d681SAndroid Build Coastguard Worker
1085*9880d681SAndroid Build Coastguard Worker; VMAEF.
1086*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmaef(<4 x i32> %a, <4 x i32> %b, <2 x i64> %c) {
1087*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaef:
1088*9880d681SAndroid Build Coastguard Worker; CHECK: vmaef %v24, %v24, %v26, %v28
1089*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1090*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vmaef(<4 x i32> %a, <4 x i32> %b,
1091*9880d681SAndroid Build Coastguard Worker                                         <2 x i64> %c)
1092*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1093*9880d681SAndroid Build Coastguard Worker}
1094*9880d681SAndroid Build Coastguard Worker
1095*9880d681SAndroid Build Coastguard Worker; VMALEB.
1096*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmaleb(<16 x i8> %a, <16 x i8> %b, <8 x i16> %c) {
1097*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaleb:
1098*9880d681SAndroid Build Coastguard Worker; CHECK: vmaleb %v24, %v24, %v26, %v28
1099*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1100*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vmaleb(<16 x i8> %a, <16 x i8> %b,
1101*9880d681SAndroid Build Coastguard Worker                                          <8 x i16> %c)
1102*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1103*9880d681SAndroid Build Coastguard Worker}
1104*9880d681SAndroid Build Coastguard Worker
1105*9880d681SAndroid Build Coastguard Worker; VMALEH.
1106*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmaleh(<8 x i16> %a, <8 x i16> %b, <4 x i32> %c) {
1107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaleh:
1108*9880d681SAndroid Build Coastguard Worker; CHECK: vmaleh %v24, %v24, %v26, %v28
1109*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1110*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vmaleh(<8 x i16> %a, <8 x i16> %b,
1111*9880d681SAndroid Build Coastguard Worker                                          <4 x i32> %c)
1112*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1113*9880d681SAndroid Build Coastguard Worker}
1114*9880d681SAndroid Build Coastguard Worker
1115*9880d681SAndroid Build Coastguard Worker; VMALEF.
1116*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmalef(<4 x i32> %a, <4 x i32> %b, <2 x i64> %c) {
1117*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmalef:
1118*9880d681SAndroid Build Coastguard Worker; CHECK: vmalef %v24, %v24, %v26, %v28
1119*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1120*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vmalef(<4 x i32> %a, <4 x i32> %b,
1121*9880d681SAndroid Build Coastguard Worker                                          <2 x i64> %c)
1122*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1123*9880d681SAndroid Build Coastguard Worker}
1124*9880d681SAndroid Build Coastguard Worker
1125*9880d681SAndroid Build Coastguard Worker; VMAOB.
1126*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmaob(<16 x i8> %a, <16 x i8> %b, <8 x i16> %c) {
1127*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaob:
1128*9880d681SAndroid Build Coastguard Worker; CHECK: vmaob %v24, %v24, %v26, %v28
1129*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1130*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vmaob(<16 x i8> %a, <16 x i8> %b,
1131*9880d681SAndroid Build Coastguard Worker                                         <8 x i16> %c)
1132*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1133*9880d681SAndroid Build Coastguard Worker}
1134*9880d681SAndroid Build Coastguard Worker
1135*9880d681SAndroid Build Coastguard Worker; VMAOH.
1136*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmaoh(<8 x i16> %a, <8 x i16> %b, <4 x i32> %c) {
1137*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaoh:
1138*9880d681SAndroid Build Coastguard Worker; CHECK: vmaoh %v24, %v24, %v26, %v28
1139*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1140*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vmaoh(<8 x i16> %a, <8 x i16> %b,
1141*9880d681SAndroid Build Coastguard Worker                                         <4 x i32> %c)
1142*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1143*9880d681SAndroid Build Coastguard Worker}
1144*9880d681SAndroid Build Coastguard Worker
1145*9880d681SAndroid Build Coastguard Worker; VMAOF.
1146*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmaof(<4 x i32> %a, <4 x i32> %b, <2 x i64> %c) {
1147*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaof:
1148*9880d681SAndroid Build Coastguard Worker; CHECK: vmaof %v24, %v24, %v26, %v28
1149*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1150*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vmaof(<4 x i32> %a, <4 x i32> %b,
1151*9880d681SAndroid Build Coastguard Worker                                         <2 x i64> %c)
1152*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1153*9880d681SAndroid Build Coastguard Worker}
1154*9880d681SAndroid Build Coastguard Worker
1155*9880d681SAndroid Build Coastguard Worker; VMALOB.
1156*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmalob(<16 x i8> %a, <16 x i8> %b, <8 x i16> %c) {
1157*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmalob:
1158*9880d681SAndroid Build Coastguard Worker; CHECK: vmalob %v24, %v24, %v26, %v28
1159*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1160*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vmalob(<16 x i8> %a, <16 x i8> %b,
1161*9880d681SAndroid Build Coastguard Worker                                          <8 x i16> %c)
1162*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1163*9880d681SAndroid Build Coastguard Worker}
1164*9880d681SAndroid Build Coastguard Worker
1165*9880d681SAndroid Build Coastguard Worker; VMALOH.
1166*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmaloh(<8 x i16> %a, <8 x i16> %b, <4 x i32> %c) {
1167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmaloh:
1168*9880d681SAndroid Build Coastguard Worker; CHECK: vmaloh %v24, %v24, %v26, %v28
1169*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1170*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vmaloh(<8 x i16> %a, <8 x i16> %b,
1171*9880d681SAndroid Build Coastguard Worker                                          <4 x i32> %c)
1172*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1173*9880d681SAndroid Build Coastguard Worker}
1174*9880d681SAndroid Build Coastguard Worker
1175*9880d681SAndroid Build Coastguard Worker; VMALOF.
1176*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmalof(<4 x i32> %a, <4 x i32> %b, <2 x i64> %c) {
1177*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmalof:
1178*9880d681SAndroid Build Coastguard Worker; CHECK: vmalof %v24, %v24, %v26, %v28
1179*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1180*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vmalof(<4 x i32> %a, <4 x i32> %b,
1181*9880d681SAndroid Build Coastguard Worker                                          <2 x i64> %c)
1182*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1183*9880d681SAndroid Build Coastguard Worker}
1184*9880d681SAndroid Build Coastguard Worker
1185*9880d681SAndroid Build Coastguard Worker; VMHB.
1186*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vmhb(<16 x i8> %a, <16 x i8> %b) {
1187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmhb:
1188*9880d681SAndroid Build Coastguard Worker; CHECK: vmhb %v24, %v24, %v26
1189*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1190*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vmhb(<16 x i8> %a, <16 x i8> %b)
1191*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1192*9880d681SAndroid Build Coastguard Worker}
1193*9880d681SAndroid Build Coastguard Worker
1194*9880d681SAndroid Build Coastguard Worker; VMHH.
1195*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmhh(<8 x i16> %a, <8 x i16> %b) {
1196*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmhh:
1197*9880d681SAndroid Build Coastguard Worker; CHECK: vmhh %v24, %v24, %v26
1198*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1199*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vmhh(<8 x i16> %a, <8 x i16> %b)
1200*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1201*9880d681SAndroid Build Coastguard Worker}
1202*9880d681SAndroid Build Coastguard Worker
1203*9880d681SAndroid Build Coastguard Worker; VMHF.
1204*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmhf(<4 x i32> %a, <4 x i32> %b) {
1205*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmhf:
1206*9880d681SAndroid Build Coastguard Worker; CHECK: vmhf %v24, %v24, %v26
1207*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1208*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vmhf(<4 x i32> %a, <4 x i32> %b)
1209*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1210*9880d681SAndroid Build Coastguard Worker}
1211*9880d681SAndroid Build Coastguard Worker
1212*9880d681SAndroid Build Coastguard Worker; VMLHB.
1213*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vmlhb(<16 x i8> %a, <16 x i8> %b) {
1214*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlhb:
1215*9880d681SAndroid Build Coastguard Worker; CHECK: vmlhb %v24, %v24, %v26
1216*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1217*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vmlhb(<16 x i8> %a, <16 x i8> %b)
1218*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1219*9880d681SAndroid Build Coastguard Worker}
1220*9880d681SAndroid Build Coastguard Worker
1221*9880d681SAndroid Build Coastguard Worker; VMLHH.
1222*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmlhh(<8 x i16> %a, <8 x i16> %b) {
1223*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlhh:
1224*9880d681SAndroid Build Coastguard Worker; CHECK: vmlhh %v24, %v24, %v26
1225*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1226*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vmlhh(<8 x i16> %a, <8 x i16> %b)
1227*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1228*9880d681SAndroid Build Coastguard Worker}
1229*9880d681SAndroid Build Coastguard Worker
1230*9880d681SAndroid Build Coastguard Worker; VMLHF.
1231*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmlhf(<4 x i32> %a, <4 x i32> %b) {
1232*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlhf:
1233*9880d681SAndroid Build Coastguard Worker; CHECK: vmlhf %v24, %v24, %v26
1234*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1235*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vmlhf(<4 x i32> %a, <4 x i32> %b)
1236*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1237*9880d681SAndroid Build Coastguard Worker}
1238*9880d681SAndroid Build Coastguard Worker
1239*9880d681SAndroid Build Coastguard Worker; VMEB.
1240*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmeb(<16 x i8> %a, <16 x i8> %b) {
1241*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmeb:
1242*9880d681SAndroid Build Coastguard Worker; CHECK: vmeb %v24, %v24, %v26
1243*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1244*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vmeb(<16 x i8> %a, <16 x i8> %b)
1245*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1246*9880d681SAndroid Build Coastguard Worker}
1247*9880d681SAndroid Build Coastguard Worker
1248*9880d681SAndroid Build Coastguard Worker; VMEH.
1249*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmeh(<8 x i16> %a, <8 x i16> %b) {
1250*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmeh:
1251*9880d681SAndroid Build Coastguard Worker; CHECK: vmeh %v24, %v24, %v26
1252*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1253*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vmeh(<8 x i16> %a, <8 x i16> %b)
1254*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1255*9880d681SAndroid Build Coastguard Worker}
1256*9880d681SAndroid Build Coastguard Worker
1257*9880d681SAndroid Build Coastguard Worker; VMEF.
1258*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmef(<4 x i32> %a, <4 x i32> %b) {
1259*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmef:
1260*9880d681SAndroid Build Coastguard Worker; CHECK: vmef %v24, %v24, %v26
1261*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1262*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vmef(<4 x i32> %a, <4 x i32> %b)
1263*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1264*9880d681SAndroid Build Coastguard Worker}
1265*9880d681SAndroid Build Coastguard Worker
1266*9880d681SAndroid Build Coastguard Worker; VMLEB.
1267*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmleb(<16 x i8> %a, <16 x i8> %b) {
1268*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmleb:
1269*9880d681SAndroid Build Coastguard Worker; CHECK: vmleb %v24, %v24, %v26
1270*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1271*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vmleb(<16 x i8> %a, <16 x i8> %b)
1272*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1273*9880d681SAndroid Build Coastguard Worker}
1274*9880d681SAndroid Build Coastguard Worker
1275*9880d681SAndroid Build Coastguard Worker; VMLEH.
1276*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmleh(<8 x i16> %a, <8 x i16> %b) {
1277*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmleh:
1278*9880d681SAndroid Build Coastguard Worker; CHECK: vmleh %v24, %v24, %v26
1279*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1280*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vmleh(<8 x i16> %a, <8 x i16> %b)
1281*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1282*9880d681SAndroid Build Coastguard Worker}
1283*9880d681SAndroid Build Coastguard Worker
1284*9880d681SAndroid Build Coastguard Worker; VMLEF.
1285*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlef(<4 x i32> %a, <4 x i32> %b) {
1286*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlef:
1287*9880d681SAndroid Build Coastguard Worker; CHECK: vmlef %v24, %v24, %v26
1288*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1289*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vmlef(<4 x i32> %a, <4 x i32> %b)
1290*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1291*9880d681SAndroid Build Coastguard Worker}
1292*9880d681SAndroid Build Coastguard Worker
1293*9880d681SAndroid Build Coastguard Worker; VMOB.
1294*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmob(<16 x i8> %a, <16 x i8> %b) {
1295*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmob:
1296*9880d681SAndroid Build Coastguard Worker; CHECK: vmob %v24, %v24, %v26
1297*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1298*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vmob(<16 x i8> %a, <16 x i8> %b)
1299*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1300*9880d681SAndroid Build Coastguard Worker}
1301*9880d681SAndroid Build Coastguard Worker
1302*9880d681SAndroid Build Coastguard Worker; VMOH.
1303*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmoh(<8 x i16> %a, <8 x i16> %b) {
1304*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmoh:
1305*9880d681SAndroid Build Coastguard Worker; CHECK: vmoh %v24, %v24, %v26
1306*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1307*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vmoh(<8 x i16> %a, <8 x i16> %b)
1308*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1309*9880d681SAndroid Build Coastguard Worker}
1310*9880d681SAndroid Build Coastguard Worker
1311*9880d681SAndroid Build Coastguard Worker; VMOF.
1312*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmof(<4 x i32> %a, <4 x i32> %b) {
1313*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmof:
1314*9880d681SAndroid Build Coastguard Worker; CHECK: vmof %v24, %v24, %v26
1315*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1316*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vmof(<4 x i32> %a, <4 x i32> %b)
1317*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1318*9880d681SAndroid Build Coastguard Worker}
1319*9880d681SAndroid Build Coastguard Worker
1320*9880d681SAndroid Build Coastguard Worker; VMLOB.
1321*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vmlob(<16 x i8> %a, <16 x i8> %b) {
1322*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlob:
1323*9880d681SAndroid Build Coastguard Worker; CHECK: vmlob %v24, %v24, %v26
1324*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1325*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vmlob(<16 x i8> %a, <16 x i8> %b)
1326*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1327*9880d681SAndroid Build Coastguard Worker}
1328*9880d681SAndroid Build Coastguard Worker
1329*9880d681SAndroid Build Coastguard Worker; VMLOH.
1330*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vmloh(<8 x i16> %a, <8 x i16> %b) {
1331*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmloh:
1332*9880d681SAndroid Build Coastguard Worker; CHECK: vmloh %v24, %v24, %v26
1333*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1334*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vmloh(<8 x i16> %a, <8 x i16> %b)
1335*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1336*9880d681SAndroid Build Coastguard Worker}
1337*9880d681SAndroid Build Coastguard Worker
1338*9880d681SAndroid Build Coastguard Worker; VMLOF.
1339*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vmlof(<4 x i32> %a, <4 x i32> %b) {
1340*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vmlof:
1341*9880d681SAndroid Build Coastguard Worker; CHECK: vmlof %v24, %v24, %v26
1342*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1343*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vmlof(<4 x i32> %a, <4 x i32> %b)
1344*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1345*9880d681SAndroid Build Coastguard Worker}
1346*9880d681SAndroid Build Coastguard Worker
1347*9880d681SAndroid Build Coastguard Worker; VERLLVB.
1348*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verllvb(<16 x i8> %a, <16 x i8> %b) {
1349*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllvb:
1350*9880d681SAndroid Build Coastguard Worker; CHECK: verllvb %v24, %v24, %v26
1351*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1352*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.verllvb(<16 x i8> %a, <16 x i8> %b)
1353*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1354*9880d681SAndroid Build Coastguard Worker}
1355*9880d681SAndroid Build Coastguard Worker
1356*9880d681SAndroid Build Coastguard Worker; VERLLVH.
1357*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_verllvh(<8 x i16> %a, <8 x i16> %b) {
1358*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllvh:
1359*9880d681SAndroid Build Coastguard Worker; CHECK: verllvh %v24, %v24, %v26
1360*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1361*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.verllvh(<8 x i16> %a, <8 x i16> %b)
1362*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1363*9880d681SAndroid Build Coastguard Worker}
1364*9880d681SAndroid Build Coastguard Worker
1365*9880d681SAndroid Build Coastguard Worker; VERLLVF.
1366*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_verllvf(<4 x i32> %a, <4 x i32> %b) {
1367*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllvf:
1368*9880d681SAndroid Build Coastguard Worker; CHECK: verllvf %v24, %v24, %v26
1369*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1370*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.verllvf(<4 x i32> %a, <4 x i32> %b)
1371*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1372*9880d681SAndroid Build Coastguard Worker}
1373*9880d681SAndroid Build Coastguard Worker
1374*9880d681SAndroid Build Coastguard Worker; VERLLVG.
1375*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_verllvg(<2 x i64> %a, <2 x i64> %b) {
1376*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllvg:
1377*9880d681SAndroid Build Coastguard Worker; CHECK: verllvg %v24, %v24, %v26
1378*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1379*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.verllvg(<2 x i64> %a, <2 x i64> %b)
1380*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1381*9880d681SAndroid Build Coastguard Worker}
1382*9880d681SAndroid Build Coastguard Worker
1383*9880d681SAndroid Build Coastguard Worker; VERLLB.
1384*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verllb(<16 x i8> %a, i32 %b) {
1385*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllb:
1386*9880d681SAndroid Build Coastguard Worker; CHECK: verllb %v24, %v24, 0(%r2)
1387*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1388*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.verllb(<16 x i8> %a, i32 %b)
1389*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1390*9880d681SAndroid Build Coastguard Worker}
1391*9880d681SAndroid Build Coastguard Worker
1392*9880d681SAndroid Build Coastguard Worker; VERLLH.
1393*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_verllh(<8 x i16> %a, i32 %b) {
1394*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllh:
1395*9880d681SAndroid Build Coastguard Worker; CHECK: verllh %v24, %v24, 0(%r2)
1396*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1397*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.verllh(<8 x i16> %a, i32 %b)
1398*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1399*9880d681SAndroid Build Coastguard Worker}
1400*9880d681SAndroid Build Coastguard Worker
1401*9880d681SAndroid Build Coastguard Worker; VERLLF.
1402*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_verllf(<4 x i32> %a, i32 %b) {
1403*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllf:
1404*9880d681SAndroid Build Coastguard Worker; CHECK: verllf %v24, %v24, 0(%r2)
1405*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1406*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.verllf(<4 x i32> %a, i32 %b)
1407*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1408*9880d681SAndroid Build Coastguard Worker}
1409*9880d681SAndroid Build Coastguard Worker
1410*9880d681SAndroid Build Coastguard Worker; VERLLG.
1411*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_verllg(<2 x i64> %a, i32 %b) {
1412*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllg:
1413*9880d681SAndroid Build Coastguard Worker; CHECK: verllg %v24, %v24, 0(%r2)
1414*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1415*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.verllg(<2 x i64> %a, i32 %b)
1416*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1417*9880d681SAndroid Build Coastguard Worker}
1418*9880d681SAndroid Build Coastguard Worker
1419*9880d681SAndroid Build Coastguard Worker; VERLLB with the smallest count.
1420*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verllb_1(<16 x i8> %a) {
1421*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllb_1:
1422*9880d681SAndroid Build Coastguard Worker; CHECK: verllb %v24, %v24, 1
1423*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1424*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.verllb(<16 x i8> %a, i32 1)
1425*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1426*9880d681SAndroid Build Coastguard Worker}
1427*9880d681SAndroid Build Coastguard Worker
1428*9880d681SAndroid Build Coastguard Worker; VERLLB with the largest count.
1429*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verllb_4095(<16 x i8> %a) {
1430*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllb_4095:
1431*9880d681SAndroid Build Coastguard Worker; CHECK: verllb %v24, %v24, 4095
1432*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1433*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.verllb(<16 x i8> %a, i32 4095)
1434*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1435*9880d681SAndroid Build Coastguard Worker}
1436*9880d681SAndroid Build Coastguard Worker
1437*9880d681SAndroid Build Coastguard Worker; VERLLB with the largest count + 1.
1438*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verllb_4096(<16 x i8> %a) {
1439*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verllb_4096:
1440*9880d681SAndroid Build Coastguard Worker; CHECK: lhi [[REG:%r[1-5]]], 4096
1441*9880d681SAndroid Build Coastguard Worker; CHECK: verllb %v24, %v24, 0([[REG]])
1442*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1443*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.verllb(<16 x i8> %a, i32 4096)
1444*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1445*9880d681SAndroid Build Coastguard Worker}
1446*9880d681SAndroid Build Coastguard Worker
1447*9880d681SAndroid Build Coastguard Worker; VERIMB.
1448*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verimb(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
1449*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verimb:
1450*9880d681SAndroid Build Coastguard Worker; CHECK: verimb %v24, %v26, %v28, 1
1451*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1452*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.verimb(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, i32 1)
1453*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1454*9880d681SAndroid Build Coastguard Worker}
1455*9880d681SAndroid Build Coastguard Worker
1456*9880d681SAndroid Build Coastguard Worker; VERIMH.
1457*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_verimh(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {
1458*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verimh:
1459*9880d681SAndroid Build Coastguard Worker; CHECK: verimh %v24, %v26, %v28, 1
1460*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1461*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.verimh(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, i32 1)
1462*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1463*9880d681SAndroid Build Coastguard Worker}
1464*9880d681SAndroid Build Coastguard Worker
1465*9880d681SAndroid Build Coastguard Worker; VERIMF.
1466*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_verimf(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
1467*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verimf:
1468*9880d681SAndroid Build Coastguard Worker; CHECK: verimf %v24, %v26, %v28, 1
1469*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1470*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.verimf(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, i32 1)
1471*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1472*9880d681SAndroid Build Coastguard Worker}
1473*9880d681SAndroid Build Coastguard Worker
1474*9880d681SAndroid Build Coastguard Worker; VERIMG.
1475*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_verimg(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {
1476*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verimg:
1477*9880d681SAndroid Build Coastguard Worker; CHECK: verimg %v24, %v26, %v28, 1
1478*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1479*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.verimg(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, i32 1)
1480*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1481*9880d681SAndroid Build Coastguard Worker}
1482*9880d681SAndroid Build Coastguard Worker
1483*9880d681SAndroid Build Coastguard Worker; VERIMB with a different mask.
1484*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_verimb_254(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
1485*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_verimb_254:
1486*9880d681SAndroid Build Coastguard Worker; CHECK: verimb %v24, %v26, %v28, 254
1487*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1488*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.verimb(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, i32 254)
1489*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1490*9880d681SAndroid Build Coastguard Worker}
1491*9880d681SAndroid Build Coastguard Worker
1492*9880d681SAndroid Build Coastguard Worker; VSL.
1493*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsl(<16 x i8> %a, <16 x i8> %b) {
1494*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsl:
1495*9880d681SAndroid Build Coastguard Worker; CHECK: vsl %v24, %v24, %v26
1496*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1497*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vsl(<16 x i8> %a, <16 x i8> %b)
1498*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1499*9880d681SAndroid Build Coastguard Worker}
1500*9880d681SAndroid Build Coastguard Worker
1501*9880d681SAndroid Build Coastguard Worker; VSLB.
1502*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vslb(<16 x i8> %a, <16 x i8> %b) {
1503*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vslb:
1504*9880d681SAndroid Build Coastguard Worker; CHECK: vslb %v24, %v24, %v26
1505*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1506*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vslb(<16 x i8> %a, <16 x i8> %b)
1507*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1508*9880d681SAndroid Build Coastguard Worker}
1509*9880d681SAndroid Build Coastguard Worker
1510*9880d681SAndroid Build Coastguard Worker; VSRA.
1511*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsra(<16 x i8> %a, <16 x i8> %b) {
1512*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsra:
1513*9880d681SAndroid Build Coastguard Worker; CHECK: vsra %v24, %v24, %v26
1514*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1515*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vsra(<16 x i8> %a, <16 x i8> %b)
1516*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1517*9880d681SAndroid Build Coastguard Worker}
1518*9880d681SAndroid Build Coastguard Worker
1519*9880d681SAndroid Build Coastguard Worker; VSRAB.
1520*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsrab(<16 x i8> %a, <16 x i8> %b) {
1521*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsrab:
1522*9880d681SAndroid Build Coastguard Worker; CHECK: vsrab %v24, %v24, %v26
1523*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1524*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vsrab(<16 x i8> %a, <16 x i8> %b)
1525*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1526*9880d681SAndroid Build Coastguard Worker}
1527*9880d681SAndroid Build Coastguard Worker
1528*9880d681SAndroid Build Coastguard Worker; VSRL.
1529*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsrl(<16 x i8> %a, <16 x i8> %b) {
1530*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsrl:
1531*9880d681SAndroid Build Coastguard Worker; CHECK: vsrl %v24, %v24, %v26
1532*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1533*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vsrl(<16 x i8> %a, <16 x i8> %b)
1534*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1535*9880d681SAndroid Build Coastguard Worker}
1536*9880d681SAndroid Build Coastguard Worker
1537*9880d681SAndroid Build Coastguard Worker; VSRLB.
1538*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsrlb(<16 x i8> %a, <16 x i8> %b) {
1539*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsrlb:
1540*9880d681SAndroid Build Coastguard Worker; CHECK: vsrlb %v24, %v24, %v26
1541*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1542*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vsrlb(<16 x i8> %a, <16 x i8> %b)
1543*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1544*9880d681SAndroid Build Coastguard Worker}
1545*9880d681SAndroid Build Coastguard Worker
1546*9880d681SAndroid Build Coastguard Worker; VSLDB with the minimum useful value.
1547*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsldb_1(<16 x i8> %a, <16 x i8> %b) {
1548*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsldb_1:
1549*9880d681SAndroid Build Coastguard Worker; CHECK: vsldb %v24, %v24, %v26, 1
1550*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1551*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vsldb(<16 x i8> %a, <16 x i8> %b, i32 1)
1552*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1553*9880d681SAndroid Build Coastguard Worker}
1554*9880d681SAndroid Build Coastguard Worker
1555*9880d681SAndroid Build Coastguard Worker; VSLDB with the maximum value.
1556*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsldb_15(<16 x i8> %a, <16 x i8> %b) {
1557*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsldb_15:
1558*9880d681SAndroid Build Coastguard Worker; CHECK: vsldb %v24, %v24, %v26, 15
1559*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1560*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vsldb(<16 x i8> %a, <16 x i8> %b, i32 15)
1561*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1562*9880d681SAndroid Build Coastguard Worker}
1563*9880d681SAndroid Build Coastguard Worker
1564*9880d681SAndroid Build Coastguard Worker; VSCBIB.
1565*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vscbib(<16 x i8> %a, <16 x i8> %b) {
1566*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vscbib:
1567*9880d681SAndroid Build Coastguard Worker; CHECK: vscbib %v24, %v24, %v26
1568*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1569*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vscbib(<16 x i8> %a, <16 x i8> %b)
1570*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1571*9880d681SAndroid Build Coastguard Worker}
1572*9880d681SAndroid Build Coastguard Worker
1573*9880d681SAndroid Build Coastguard Worker; VSCBIH.
1574*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vscbih(<8 x i16> %a, <8 x i16> %b) {
1575*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vscbih:
1576*9880d681SAndroid Build Coastguard Worker; CHECK: vscbih %v24, %v24, %v26
1577*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1578*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vscbih(<8 x i16> %a, <8 x i16> %b)
1579*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1580*9880d681SAndroid Build Coastguard Worker}
1581*9880d681SAndroid Build Coastguard Worker
1582*9880d681SAndroid Build Coastguard Worker; VSCBIF.
1583*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vscbif(<4 x i32> %a, <4 x i32> %b) {
1584*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vscbif:
1585*9880d681SAndroid Build Coastguard Worker; CHECK: vscbif %v24, %v24, %v26
1586*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1587*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vscbif(<4 x i32> %a, <4 x i32> %b)
1588*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1589*9880d681SAndroid Build Coastguard Worker}
1590*9880d681SAndroid Build Coastguard Worker
1591*9880d681SAndroid Build Coastguard Worker; VSCBIG.
1592*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vscbig(<2 x i64> %a, <2 x i64> %b) {
1593*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vscbig:
1594*9880d681SAndroid Build Coastguard Worker; CHECK: vscbig %v24, %v24, %v26
1595*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1596*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vscbig(<2 x i64> %a, <2 x i64> %b)
1597*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1598*9880d681SAndroid Build Coastguard Worker}
1599*9880d681SAndroid Build Coastguard Worker
1600*9880d681SAndroid Build Coastguard Worker; VSQ.
1601*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsq(<16 x i8> %a, <16 x i8> %b) {
1602*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsq:
1603*9880d681SAndroid Build Coastguard Worker; CHECK: vsq %v24, %v24, %v26
1604*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1605*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vsq(<16 x i8> %a, <16 x i8> %b)
1606*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1607*9880d681SAndroid Build Coastguard Worker}
1608*9880d681SAndroid Build Coastguard Worker
1609*9880d681SAndroid Build Coastguard Worker; VSBIQ.
1610*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsbiq(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
1611*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsbiq:
1612*9880d681SAndroid Build Coastguard Worker; CHECK: vsbiq %v24, %v24, %v26, %v28
1613*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1614*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vsbiq(<16 x i8> %a, <16 x i8> %b,
1615*9880d681SAndroid Build Coastguard Worker                                         <16 x i8> %c)
1616*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1617*9880d681SAndroid Build Coastguard Worker}
1618*9880d681SAndroid Build Coastguard Worker
1619*9880d681SAndroid Build Coastguard Worker; VSCBIQ.
1620*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vscbiq(<16 x i8> %a, <16 x i8> %b) {
1621*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vscbiq:
1622*9880d681SAndroid Build Coastguard Worker; CHECK: vscbiq %v24, %v24, %v26
1623*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1624*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vscbiq(<16 x i8> %a, <16 x i8> %b)
1625*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1626*9880d681SAndroid Build Coastguard Worker}
1627*9880d681SAndroid Build Coastguard Worker
1628*9880d681SAndroid Build Coastguard Worker; VSBCBIQ.
1629*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsbcbiq(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
1630*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsbcbiq:
1631*9880d681SAndroid Build Coastguard Worker; CHECK: vsbcbiq %v24, %v24, %v26, %v28
1632*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1633*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vsbcbiq(<16 x i8> %a, <16 x i8> %b,
1634*9880d681SAndroid Build Coastguard Worker                                           <16 x i8> %c)
1635*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1636*9880d681SAndroid Build Coastguard Worker}
1637*9880d681SAndroid Build Coastguard Worker
1638*9880d681SAndroid Build Coastguard Worker; VSUMB.
1639*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vsumb(<16 x i8> %a, <16 x i8> %b) {
1640*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsumb:
1641*9880d681SAndroid Build Coastguard Worker; CHECK: vsumb %v24, %v24, %v26
1642*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1643*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vsumb(<16 x i8> %a, <16 x i8> %b)
1644*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1645*9880d681SAndroid Build Coastguard Worker}
1646*9880d681SAndroid Build Coastguard Worker
1647*9880d681SAndroid Build Coastguard Worker; VSUMH.
1648*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vsumh(<8 x i16> %a, <8 x i16> %b) {
1649*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsumh:
1650*9880d681SAndroid Build Coastguard Worker; CHECK: vsumh %v24, %v24, %v26
1651*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1652*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vsumh(<8 x i16> %a, <8 x i16> %b)
1653*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1654*9880d681SAndroid Build Coastguard Worker}
1655*9880d681SAndroid Build Coastguard Worker
1656*9880d681SAndroid Build Coastguard Worker; VSUMGH.
1657*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vsumgh(<8 x i16> %a, <8 x i16> %b) {
1658*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsumgh:
1659*9880d681SAndroid Build Coastguard Worker; CHECK: vsumgh %v24, %v24, %v26
1660*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1661*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vsumgh(<8 x i16> %a, <8 x i16> %b)
1662*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1663*9880d681SAndroid Build Coastguard Worker}
1664*9880d681SAndroid Build Coastguard Worker
1665*9880d681SAndroid Build Coastguard Worker; VSUMGF.
1666*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vsumgf(<4 x i32> %a, <4 x i32> %b) {
1667*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsumgf:
1668*9880d681SAndroid Build Coastguard Worker; CHECK: vsumgf %v24, %v24, %v26
1669*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1670*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.s390.vsumgf(<4 x i32> %a, <4 x i32> %b)
1671*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1672*9880d681SAndroid Build Coastguard Worker}
1673*9880d681SAndroid Build Coastguard Worker
1674*9880d681SAndroid Build Coastguard Worker; VSUMQF.
1675*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsumqf(<4 x i32> %a, <4 x i32> %b) {
1676*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsumqf:
1677*9880d681SAndroid Build Coastguard Worker; CHECK: vsumqf %v24, %v24, %v26
1678*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1679*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vsumqf(<4 x i32> %a, <4 x i32> %b)
1680*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1681*9880d681SAndroid Build Coastguard Worker}
1682*9880d681SAndroid Build Coastguard Worker
1683*9880d681SAndroid Build Coastguard Worker; VSUMQG.
1684*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vsumqg(<2 x i64> %a, <2 x i64> %b) {
1685*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vsumqg:
1686*9880d681SAndroid Build Coastguard Worker; CHECK: vsumqg %v24, %v24, %v26
1687*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1688*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vsumqg(<2 x i64> %a, <2 x i64> %b)
1689*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1690*9880d681SAndroid Build Coastguard Worker}
1691*9880d681SAndroid Build Coastguard Worker
1692*9880d681SAndroid Build Coastguard Worker; VTM with no processing of the result.
1693*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vtm(<16 x i8> %a, <16 x i8> %b) {
1694*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vtm:
1695*9880d681SAndroid Build Coastguard Worker; CHECK: vtm %v24, %v26
1696*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
1697*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
1698*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1699*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.s390.vtm(<16 x i8> %a, <16 x i8> %b)
1700*9880d681SAndroid Build Coastguard Worker  ret i32 %res
1701*9880d681SAndroid Build Coastguard Worker}
1702*9880d681SAndroid Build Coastguard Worker
1703*9880d681SAndroid Build Coastguard Worker; VTM, storing to %ptr if all bits are set.
1704*9880d681SAndroid Build Coastguard Workerdefine void @test_vtm_all_store(<16 x i8> %a, <16 x i8> %b, i32 *%ptr) {
1705*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vtm_all_store:
1706*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
1707*9880d681SAndroid Build Coastguard Worker; CHECK: vtm %v24, %v26
1708*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14
1709*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
1710*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1711*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.s390.vtm(<16 x i8> %a, <16 x i8> %b)
1712*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge i32 %res, 3
1713*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
1714*9880d681SAndroid Build Coastguard Worker
1715*9880d681SAndroid Build Coastguard Workerstore:
1716*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
1717*9880d681SAndroid Build Coastguard Worker  br label %exit
1718*9880d681SAndroid Build Coastguard Worker
1719*9880d681SAndroid Build Coastguard Workerexit:
1720*9880d681SAndroid Build Coastguard Worker  ret void
1721*9880d681SAndroid Build Coastguard Worker}
1722*9880d681SAndroid Build Coastguard Worker
1723*9880d681SAndroid Build Coastguard Worker; VCEQBS with no processing of the result.
1724*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqbs(<16 x i8> %a, <16 x i8> %b) {
1725*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqbs:
1726*9880d681SAndroid Build Coastguard Worker; CHECK: vceqbs {{%v[0-9]+}}, %v24, %v26
1727*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
1728*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
1729*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1730*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vceqbs(<16 x i8> %a, <16 x i8> %b)
1731*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 1
1732*9880d681SAndroid Build Coastguard Worker  ret i32 %res
1733*9880d681SAndroid Build Coastguard Worker}
1734*9880d681SAndroid Build Coastguard Worker
1735*9880d681SAndroid Build Coastguard Worker; VCEQBS, returning 1 if any elements are equal (CC != 3).
1736*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqbs_any_bool(<16 x i8> %a, <16 x i8> %b) {
1737*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqbs_any_bool:
1738*9880d681SAndroid Build Coastguard Worker; CHECK: vceqbs {{%v[0-9]+}}, %v24, %v26
1739*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
1740*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -536870912
1741*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31
1742*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1743*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vceqbs(<16 x i8> %a, <16 x i8> %b)
1744*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 1
1745*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ne i32 %res, 3
1746*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
1747*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
1748*9880d681SAndroid Build Coastguard Worker}
1749*9880d681SAndroid Build Coastguard Worker
1750*9880d681SAndroid Build Coastguard Worker; VCEQBS, storing to %ptr if any elements are equal.
1751*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vceqbs_any_store(<16 x i8> %a, <16 x i8> %b, i32 *%ptr) {
1752*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqbs_any_store:
1753*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
1754*9880d681SAndroid Build Coastguard Worker; CHECK: vceqbs %v24, %v24, %v26
1755*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bor|bnler}} %r14
1756*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
1757*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1758*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vceqbs(<16 x i8> %a, <16 x i8> %b)
1759*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
1760*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
1761*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ule i32 %cc, 2
1762*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
1763*9880d681SAndroid Build Coastguard Worker
1764*9880d681SAndroid Build Coastguard Workerstore:
1765*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
1766*9880d681SAndroid Build Coastguard Worker  br label %exit
1767*9880d681SAndroid Build Coastguard Worker
1768*9880d681SAndroid Build Coastguard Workerexit:
1769*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1770*9880d681SAndroid Build Coastguard Worker}
1771*9880d681SAndroid Build Coastguard Worker
1772*9880d681SAndroid Build Coastguard Worker; VCEQHS with no processing of the result.
1773*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqhs(<8 x i16> %a, <8 x i16> %b) {
1774*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqhs:
1775*9880d681SAndroid Build Coastguard Worker; CHECK: vceqhs {{%v[0-9]+}}, %v24, %v26
1776*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
1777*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
1778*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1779*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vceqhs(<8 x i16> %a, <8 x i16> %b)
1780*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 1
1781*9880d681SAndroid Build Coastguard Worker  ret i32 %res
1782*9880d681SAndroid Build Coastguard Worker}
1783*9880d681SAndroid Build Coastguard Worker
1784*9880d681SAndroid Build Coastguard Worker; VCEQHS, returning 1 if not all elements are equal.
1785*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqhs_notall_bool(<8 x i16> %a, <8 x i16> %b) {
1786*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqhs_notall_bool:
1787*9880d681SAndroid Build Coastguard Worker; CHECK: vceqhs {{%v[0-9]+}}, %v24, %v26
1788*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
1789*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 36
1790*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1791*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vceqhs(<8 x i16> %a, <8 x i16> %b)
1792*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 1
1793*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge i32 %res, 1
1794*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
1795*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
1796*9880d681SAndroid Build Coastguard Worker}
1797*9880d681SAndroid Build Coastguard Worker
1798*9880d681SAndroid Build Coastguard Worker; VCEQHS, storing to %ptr if not all elements are equal.
1799*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vceqhs_notall_store(<8 x i16> %a, <8 x i16> %b,
1800*9880d681SAndroid Build Coastguard Worker                                           i32 *%ptr) {
1801*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqhs_notall_store:
1802*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
1803*9880d681SAndroid Build Coastguard Worker; CHECK: vceqhs %v24, %v24, %v26
1804*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bher|ber}} %r14
1805*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
1806*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1807*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vceqhs(<8 x i16> %a, <8 x i16> %b)
1808*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
1809*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
1810*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt i32 %cc, 0
1811*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
1812*9880d681SAndroid Build Coastguard Worker
1813*9880d681SAndroid Build Coastguard Workerstore:
1814*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
1815*9880d681SAndroid Build Coastguard Worker  br label %exit
1816*9880d681SAndroid Build Coastguard Worker
1817*9880d681SAndroid Build Coastguard Workerexit:
1818*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
1819*9880d681SAndroid Build Coastguard Worker}
1820*9880d681SAndroid Build Coastguard Worker
1821*9880d681SAndroid Build Coastguard Worker; VCEQFS with no processing of the result.
1822*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqfs(<4 x i32> %a, <4 x i32> %b) {
1823*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqfs:
1824*9880d681SAndroid Build Coastguard Worker; CHECK: vceqfs {{%v[0-9]+}}, %v24, %v26
1825*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
1826*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
1827*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1828*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vceqfs(<4 x i32> %a, <4 x i32> %b)
1829*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 1
1830*9880d681SAndroid Build Coastguard Worker  ret i32 %res
1831*9880d681SAndroid Build Coastguard Worker}
1832*9880d681SAndroid Build Coastguard Worker
1833*9880d681SAndroid Build Coastguard Worker; VCEQFS, returning 1 if no elements are equal.
1834*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqfs_none_bool(<4 x i32> %a, <4 x i32> %b) {
1835*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqfs_none_bool:
1836*9880d681SAndroid Build Coastguard Worker; CHECK: vceqfs {{%v[0-9]+}}, %v24, %v26
1837*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
1838*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 35
1839*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1840*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vceqfs(<4 x i32> %a, <4 x i32> %b)
1841*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 1
1842*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %res, 3
1843*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
1844*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
1845*9880d681SAndroid Build Coastguard Worker}
1846*9880d681SAndroid Build Coastguard Worker
1847*9880d681SAndroid Build Coastguard Worker; VCEQFS, storing to %ptr if no elements are equal.
1848*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vceqfs_none_store(<4 x i32> %a, <4 x i32> %b,
1849*9880d681SAndroid Build Coastguard Worker                                         i32 *%ptr) {
1850*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqfs_none_store:
1851*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
1852*9880d681SAndroid Build Coastguard Worker; CHECK: vceqfs %v24, %v24, %v26
1853*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14
1854*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
1855*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1856*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vceqfs(<4 x i32> %a, <4 x i32> %b)
1857*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
1858*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
1859*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge i32 %cc, 3
1860*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
1861*9880d681SAndroid Build Coastguard Worker
1862*9880d681SAndroid Build Coastguard Workerstore:
1863*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
1864*9880d681SAndroid Build Coastguard Worker  br label %exit
1865*9880d681SAndroid Build Coastguard Worker
1866*9880d681SAndroid Build Coastguard Workerexit:
1867*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1868*9880d681SAndroid Build Coastguard Worker}
1869*9880d681SAndroid Build Coastguard Worker
1870*9880d681SAndroid Build Coastguard Worker; VCEQGS with no processing of the result.
1871*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqgs(<2 x i64> %a, <2 x i64> %b) {
1872*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqgs:
1873*9880d681SAndroid Build Coastguard Worker; CHECK: vceqgs {{%v[0-9]+}}, %v24, %v26
1874*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
1875*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
1876*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1877*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vceqgs(<2 x i64> %a, <2 x i64> %b)
1878*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
1879*9880d681SAndroid Build Coastguard Worker  ret i32 %res
1880*9880d681SAndroid Build Coastguard Worker}
1881*9880d681SAndroid Build Coastguard Worker
1882*9880d681SAndroid Build Coastguard Worker; VCEQGS returning 1 if all elements are equal (CC == 0).
1883*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vceqgs_all_bool(<2 x i64> %a, <2 x i64> %b) {
1884*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqgs_all_bool:
1885*9880d681SAndroid Build Coastguard Worker; CHECK: vceqgs {{%v[0-9]+}}, %v24, %v26
1886*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
1887*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -268435456
1888*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31
1889*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1890*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vceqgs(<2 x i64> %a, <2 x i64> %b)
1891*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
1892*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult i32 %res, 1
1893*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
1894*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
1895*9880d681SAndroid Build Coastguard Worker}
1896*9880d681SAndroid Build Coastguard Worker
1897*9880d681SAndroid Build Coastguard Worker; VCEQGS, storing to %ptr if all elements are equal.
1898*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vceqgs_all_store(<2 x i64> %a, <2 x i64> %b, i32 *%ptr) {
1899*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vceqgs_all_store:
1900*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
1901*9880d681SAndroid Build Coastguard Worker; CHECK: vceqgs %v24, %v24, %v26
1902*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnher|bner}} %r14
1903*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
1904*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1905*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vceqgs(<2 x i64> %a, <2 x i64> %b)
1906*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 0
1907*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<2 x i64>, i32} %call, 1
1908*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sle i32 %cc, 0
1909*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
1910*9880d681SAndroid Build Coastguard Worker
1911*9880d681SAndroid Build Coastguard Workerstore:
1912*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
1913*9880d681SAndroid Build Coastguard Worker  br label %exit
1914*9880d681SAndroid Build Coastguard Worker
1915*9880d681SAndroid Build Coastguard Workerexit:
1916*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1917*9880d681SAndroid Build Coastguard Worker}
1918*9880d681SAndroid Build Coastguard Worker
1919*9880d681SAndroid Build Coastguard Worker; VCHBS with no processing of the result.
1920*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchbs(<16 x i8> %a, <16 x i8> %b) {
1921*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchbs:
1922*9880d681SAndroid Build Coastguard Worker; CHECK: vchbs {{%v[0-9]+}}, %v24, %v26
1923*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
1924*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
1925*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1926*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vchbs(<16 x i8> %a, <16 x i8> %b)
1927*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 1
1928*9880d681SAndroid Build Coastguard Worker  ret i32 %res
1929*9880d681SAndroid Build Coastguard Worker}
1930*9880d681SAndroid Build Coastguard Worker
1931*9880d681SAndroid Build Coastguard Worker; VCHBS, returning 1 if any elements are higher (CC != 3).
1932*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchbs_any_bool(<16 x i8> %a, <16 x i8> %b) {
1933*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchbs_any_bool:
1934*9880d681SAndroid Build Coastguard Worker; CHECK: vchbs {{%v[0-9]+}}, %v24, %v26
1935*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
1936*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -536870912
1937*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31
1938*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1939*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vchbs(<16 x i8> %a, <16 x i8> %b)
1940*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 1
1941*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ne i32 %res, 3
1942*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
1943*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
1944*9880d681SAndroid Build Coastguard Worker}
1945*9880d681SAndroid Build Coastguard Worker
1946*9880d681SAndroid Build Coastguard Worker; VCHBS, storing to %ptr if any elements are higher.
1947*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vchbs_any_store(<16 x i8> %a, <16 x i8> %b, i32 *%ptr) {
1948*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchbs_any_store:
1949*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
1950*9880d681SAndroid Build Coastguard Worker; CHECK: vchbs %v24, %v24, %v26
1951*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bor|bnler}} %r14
1952*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
1953*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1954*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vchbs(<16 x i8> %a, <16 x i8> %b)
1955*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
1956*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
1957*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ule i32 %cc, 2
1958*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
1959*9880d681SAndroid Build Coastguard Worker
1960*9880d681SAndroid Build Coastguard Workerstore:
1961*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
1962*9880d681SAndroid Build Coastguard Worker  br label %exit
1963*9880d681SAndroid Build Coastguard Worker
1964*9880d681SAndroid Build Coastguard Workerexit:
1965*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
1966*9880d681SAndroid Build Coastguard Worker}
1967*9880d681SAndroid Build Coastguard Worker
1968*9880d681SAndroid Build Coastguard Worker; VCHHS with no processing of the result.
1969*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchhs(<8 x i16> %a, <8 x i16> %b) {
1970*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchhs:
1971*9880d681SAndroid Build Coastguard Worker; CHECK: vchhs {{%v[0-9]+}}, %v24, %v26
1972*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
1973*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
1974*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1975*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vchhs(<8 x i16> %a, <8 x i16> %b)
1976*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 1
1977*9880d681SAndroid Build Coastguard Worker  ret i32 %res
1978*9880d681SAndroid Build Coastguard Worker}
1979*9880d681SAndroid Build Coastguard Worker
1980*9880d681SAndroid Build Coastguard Worker; VCHHS, returning 1 if not all elements are higher.
1981*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchhs_notall_bool(<8 x i16> %a, <8 x i16> %b) {
1982*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchhs_notall_bool:
1983*9880d681SAndroid Build Coastguard Worker; CHECK: vchhs {{%v[0-9]+}}, %v24, %v26
1984*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
1985*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 36
1986*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
1987*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vchhs(<8 x i16> %a, <8 x i16> %b)
1988*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 1
1989*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge i32 %res, 1
1990*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
1991*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
1992*9880d681SAndroid Build Coastguard Worker}
1993*9880d681SAndroid Build Coastguard Worker
1994*9880d681SAndroid Build Coastguard Worker; VCHHS, storing to %ptr if not all elements are higher.
1995*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vchhs_notall_store(<8 x i16> %a, <8 x i16> %b,
1996*9880d681SAndroid Build Coastguard Worker                                          i32 *%ptr) {
1997*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchhs_notall_store:
1998*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
1999*9880d681SAndroid Build Coastguard Worker; CHECK: vchhs %v24, %v24, %v26
2000*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bher|ber}} %r14
2001*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
2002*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2003*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vchhs(<8 x i16> %a, <8 x i16> %b)
2004*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
2005*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
2006*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt i32 %cc, 0
2007*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
2008*9880d681SAndroid Build Coastguard Worker
2009*9880d681SAndroid Build Coastguard Workerstore:
2010*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
2011*9880d681SAndroid Build Coastguard Worker  br label %exit
2012*9880d681SAndroid Build Coastguard Worker
2013*9880d681SAndroid Build Coastguard Workerexit:
2014*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2015*9880d681SAndroid Build Coastguard Worker}
2016*9880d681SAndroid Build Coastguard Worker
2017*9880d681SAndroid Build Coastguard Worker; VCHFS with no processing of the result.
2018*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchfs(<4 x i32> %a, <4 x i32> %b) {
2019*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchfs:
2020*9880d681SAndroid Build Coastguard Worker; CHECK: vchfs {{%v[0-9]+}}, %v24, %v26
2021*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
2022*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
2023*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2024*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vchfs(<4 x i32> %a, <4 x i32> %b)
2025*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 1
2026*9880d681SAndroid Build Coastguard Worker  ret i32 %res
2027*9880d681SAndroid Build Coastguard Worker}
2028*9880d681SAndroid Build Coastguard Worker
2029*9880d681SAndroid Build Coastguard Worker; VCHFS, returning 1 if no elements are higher.
2030*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchfs_none_bool(<4 x i32> %a, <4 x i32> %b) {
2031*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchfs_none_bool:
2032*9880d681SAndroid Build Coastguard Worker; CHECK: vchfs {{%v[0-9]+}}, %v24, %v26
2033*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2034*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 35
2035*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2036*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vchfs(<4 x i32> %a, <4 x i32> %b)
2037*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 1
2038*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %res, 3
2039*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
2040*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
2041*9880d681SAndroid Build Coastguard Worker}
2042*9880d681SAndroid Build Coastguard Worker
2043*9880d681SAndroid Build Coastguard Worker; VCHFS, storing to %ptr if no elements are higher.
2044*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vchfs_none_store(<4 x i32> %a, <4 x i32> %b, i32 *%ptr) {
2045*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchfs_none_store:
2046*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
2047*9880d681SAndroid Build Coastguard Worker; CHECK: vchfs %v24, %v24, %v26
2048*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14
2049*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
2050*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2051*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vchfs(<4 x i32> %a, <4 x i32> %b)
2052*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
2053*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
2054*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge i32 %cc, 3
2055*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
2056*9880d681SAndroid Build Coastguard Worker
2057*9880d681SAndroid Build Coastguard Workerstore:
2058*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
2059*9880d681SAndroid Build Coastguard Worker  br label %exit
2060*9880d681SAndroid Build Coastguard Worker
2061*9880d681SAndroid Build Coastguard Workerexit:
2062*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2063*9880d681SAndroid Build Coastguard Worker}
2064*9880d681SAndroid Build Coastguard Worker
2065*9880d681SAndroid Build Coastguard Worker; VCHGS with no processing of the result.
2066*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchgs(<2 x i64> %a, <2 x i64> %b) {
2067*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchgs:
2068*9880d681SAndroid Build Coastguard Worker; CHECK: vchgs {{%v[0-9]+}}, %v24, %v26
2069*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
2070*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
2071*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2072*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vchgs(<2 x i64> %a, <2 x i64> %b)
2073*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
2074*9880d681SAndroid Build Coastguard Worker  ret i32 %res
2075*9880d681SAndroid Build Coastguard Worker}
2076*9880d681SAndroid Build Coastguard Worker
2077*9880d681SAndroid Build Coastguard Worker; VCHGS returning 1 if all elements are higher (CC == 0).
2078*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchgs_all_bool(<2 x i64> %a, <2 x i64> %b) {
2079*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchgs_all_bool:
2080*9880d681SAndroid Build Coastguard Worker; CHECK: vchgs {{%v[0-9]+}}, %v24, %v26
2081*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
2082*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -268435456
2083*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31
2084*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2085*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vchgs(<2 x i64> %a, <2 x i64> %b)
2086*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
2087*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ult i32 %res, 1
2088*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
2089*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
2090*9880d681SAndroid Build Coastguard Worker}
2091*9880d681SAndroid Build Coastguard Worker
2092*9880d681SAndroid Build Coastguard Worker; VCHGS, storing to %ptr if all elements are higher.
2093*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vchgs_all_store(<2 x i64> %a, <2 x i64> %b, i32 *%ptr) {
2094*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchgs_all_store:
2095*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
2096*9880d681SAndroid Build Coastguard Worker; CHECK: vchgs %v24, %v24, %v26
2097*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnher|bner}} %r14
2098*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
2099*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2100*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vchgs(<2 x i64> %a, <2 x i64> %b)
2101*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 0
2102*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<2 x i64>, i32} %call, 1
2103*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sle i32 %cc, 0
2104*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
2105*9880d681SAndroid Build Coastguard Worker
2106*9880d681SAndroid Build Coastguard Workerstore:
2107*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
2108*9880d681SAndroid Build Coastguard Worker  br label %exit
2109*9880d681SAndroid Build Coastguard Worker
2110*9880d681SAndroid Build Coastguard Workerexit:
2111*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
2112*9880d681SAndroid Build Coastguard Worker}
2113*9880d681SAndroid Build Coastguard Worker
2114*9880d681SAndroid Build Coastguard Worker; VCHLBS with no processing of the result.
2115*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlbs(<16 x i8> %a, <16 x i8> %b) {
2116*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlbs:
2117*9880d681SAndroid Build Coastguard Worker; CHECK: vchlbs {{%v[0-9]+}}, %v24, %v26
2118*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
2119*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
2120*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2121*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vchlbs(<16 x i8> %a, <16 x i8> %b)
2122*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 1
2123*9880d681SAndroid Build Coastguard Worker  ret i32 %res
2124*9880d681SAndroid Build Coastguard Worker}
2125*9880d681SAndroid Build Coastguard Worker
2126*9880d681SAndroid Build Coastguard Worker; VCHLBS, returning 1 if any elements are higher (CC != 3).
2127*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlbs_any_bool(<16 x i8> %a, <16 x i8> %b) {
2128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlbs_any_bool:
2129*9880d681SAndroid Build Coastguard Worker; CHECK: vchlbs {{%v[0-9]+}}, %v24, %v26
2130*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
2131*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -536870912
2132*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31
2133*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2134*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vchlbs(<16 x i8> %a, <16 x i8> %b)
2135*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 1
2136*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ne i32 %res, 3
2137*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
2138*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
2139*9880d681SAndroid Build Coastguard Worker}
2140*9880d681SAndroid Build Coastguard Worker
2141*9880d681SAndroid Build Coastguard Worker; VCHLBS, storing to %ptr if any elements are higher.
2142*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vchlbs_any_store(<16 x i8> %a, <16 x i8> %b, i32 *%ptr) {
2143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlbs_any_store:
2144*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
2145*9880d681SAndroid Build Coastguard Worker; CHECK: vchlbs %v24, %v24, %v26
2146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bor|bnler}} %r14
2147*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
2148*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2149*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vchlbs(<16 x i8> %a, <16 x i8> %b)
2150*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
2151*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
2152*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sle i32 %cc, 2
2153*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
2154*9880d681SAndroid Build Coastguard Worker
2155*9880d681SAndroid Build Coastguard Workerstore:
2156*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
2157*9880d681SAndroid Build Coastguard Worker  br label %exit
2158*9880d681SAndroid Build Coastguard Worker
2159*9880d681SAndroid Build Coastguard Workerexit:
2160*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2161*9880d681SAndroid Build Coastguard Worker}
2162*9880d681SAndroid Build Coastguard Worker
2163*9880d681SAndroid Build Coastguard Worker; VCHLHS with no processing of the result.
2164*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlhs(<8 x i16> %a, <8 x i16> %b) {
2165*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlhs:
2166*9880d681SAndroid Build Coastguard Worker; CHECK: vchlhs {{%v[0-9]+}}, %v24, %v26
2167*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
2168*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
2169*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2170*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vchlhs(<8 x i16> %a, <8 x i16> %b)
2171*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 1
2172*9880d681SAndroid Build Coastguard Worker  ret i32 %res
2173*9880d681SAndroid Build Coastguard Worker}
2174*9880d681SAndroid Build Coastguard Worker
2175*9880d681SAndroid Build Coastguard Worker; VCHLHS, returning 1 if not all elements are higher.
2176*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlhs_notall_bool(<8 x i16> %a, <8 x i16> %b) {
2177*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlhs_notall_bool:
2178*9880d681SAndroid Build Coastguard Worker; CHECK: vchlhs {{%v[0-9]+}}, %v24, %v26
2179*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2180*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 36
2181*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2182*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vchlhs(<8 x i16> %a, <8 x i16> %b)
2183*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 1
2184*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge i32 %res, 1
2185*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
2186*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
2187*9880d681SAndroid Build Coastguard Worker}
2188*9880d681SAndroid Build Coastguard Worker
2189*9880d681SAndroid Build Coastguard Worker; VCHLHS, storing to %ptr if not all elements are higher.
2190*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vchlhs_notall_store(<8 x i16> %a, <8 x i16> %b,
2191*9880d681SAndroid Build Coastguard Worker                                           i32 *%ptr) {
2192*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlhs_notall_store:
2193*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
2194*9880d681SAndroid Build Coastguard Worker; CHECK: vchlhs %v24, %v24, %v26
2195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bher|ber}} %r14
2196*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
2197*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2198*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vchlhs(<8 x i16> %a, <8 x i16> %b)
2199*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
2200*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
2201*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sgt i32 %cc, 0
2202*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
2203*9880d681SAndroid Build Coastguard Worker
2204*9880d681SAndroid Build Coastguard Workerstore:
2205*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
2206*9880d681SAndroid Build Coastguard Worker  br label %exit
2207*9880d681SAndroid Build Coastguard Worker
2208*9880d681SAndroid Build Coastguard Workerexit:
2209*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2210*9880d681SAndroid Build Coastguard Worker}
2211*9880d681SAndroid Build Coastguard Worker
2212*9880d681SAndroid Build Coastguard Worker; VCHLFS with no processing of the result.
2213*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlfs(<4 x i32> %a, <4 x i32> %b) {
2214*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlfs:
2215*9880d681SAndroid Build Coastguard Worker; CHECK: vchlfs {{%v[0-9]+}}, %v24, %v26
2216*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
2217*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
2218*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2219*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vchlfs(<4 x i32> %a, <4 x i32> %b)
2220*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 1
2221*9880d681SAndroid Build Coastguard Worker  ret i32 %res
2222*9880d681SAndroid Build Coastguard Worker}
2223*9880d681SAndroid Build Coastguard Worker
2224*9880d681SAndroid Build Coastguard Worker; VCHLFS, returning 1 if no elements are higher.
2225*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlfs_none_bool(<4 x i32> %a, <4 x i32> %b) {
2226*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlfs_none_bool:
2227*9880d681SAndroid Build Coastguard Worker; CHECK: vchlfs {{%v[0-9]+}}, %v24, %v26
2228*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2229*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 35
2230*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2231*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vchlfs(<4 x i32> %a, <4 x i32> %b)
2232*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 1
2233*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %res, 3
2234*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
2235*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
2236*9880d681SAndroid Build Coastguard Worker}
2237*9880d681SAndroid Build Coastguard Worker
2238*9880d681SAndroid Build Coastguard Worker; VCHLFS, storing to %ptr if no elements are higher.
2239*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vchlfs_none_store(<4 x i32> %a, <4 x i32> %b,
2240*9880d681SAndroid Build Coastguard Worker                                         i32 *%ptr) {
2241*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlfs_none_store:
2242*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
2243*9880d681SAndroid Build Coastguard Worker; CHECK: vchlfs %v24, %v24, %v26
2244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14
2245*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
2246*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2247*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vchlfs(<4 x i32> %a, <4 x i32> %b)
2248*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
2249*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
2250*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge i32 %cc, 3
2251*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
2252*9880d681SAndroid Build Coastguard Worker
2253*9880d681SAndroid Build Coastguard Workerstore:
2254*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
2255*9880d681SAndroid Build Coastguard Worker  br label %exit
2256*9880d681SAndroid Build Coastguard Worker
2257*9880d681SAndroid Build Coastguard Workerexit:
2258*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2259*9880d681SAndroid Build Coastguard Worker}
2260*9880d681SAndroid Build Coastguard Worker
2261*9880d681SAndroid Build Coastguard Worker; VCHLGS with no processing of the result.
2262*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlgs(<2 x i64> %a, <2 x i64> %b) {
2263*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlgs:
2264*9880d681SAndroid Build Coastguard Worker; CHECK: vchlgs {{%v[0-9]+}}, %v24, %v26
2265*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
2266*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
2267*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2268*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vchlgs(<2 x i64> %a, <2 x i64> %b)
2269*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
2270*9880d681SAndroid Build Coastguard Worker  ret i32 %res
2271*9880d681SAndroid Build Coastguard Worker}
2272*9880d681SAndroid Build Coastguard Worker
2273*9880d681SAndroid Build Coastguard Worker; VCHLGS returning 1 if all elements are higher (CC == 0).
2274*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vchlgs_all_bool(<2 x i64> %a, <2 x i64> %b) {
2275*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlgs_all_bool:
2276*9880d681SAndroid Build Coastguard Worker; CHECK: vchlgs {{%v[0-9]+}}, %v24, %v26
2277*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
2278*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -268435456
2279*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31
2280*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2281*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vchlgs(<2 x i64> %a, <2 x i64> %b)
2282*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
2283*9880d681SAndroid Build Coastguard Worker  %cmp = icmp slt i32 %res, 1
2284*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
2285*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
2286*9880d681SAndroid Build Coastguard Worker}
2287*9880d681SAndroid Build Coastguard Worker
2288*9880d681SAndroid Build Coastguard Worker; VCHLGS, storing to %ptr if all elements are higher.
2289*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vchlgs_all_store(<2 x i64> %a, <2 x i64> %b, i32 *%ptr) {
2290*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vchlgs_all_store:
2291*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
2292*9880d681SAndroid Build Coastguard Worker; CHECK: vchlgs %v24, %v24, %v26
2293*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnher|bner}} %r14
2294*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
2295*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2296*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vchlgs(<2 x i64> %a, <2 x i64> %b)
2297*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 0
2298*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<2 x i64>, i32} %call, 1
2299*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ule i32 %cc, 0
2300*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
2301*9880d681SAndroid Build Coastguard Worker
2302*9880d681SAndroid Build Coastguard Workerstore:
2303*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
2304*9880d681SAndroid Build Coastguard Worker  br label %exit
2305*9880d681SAndroid Build Coastguard Worker
2306*9880d681SAndroid Build Coastguard Workerexit:
2307*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
2308*9880d681SAndroid Build Coastguard Worker}
2309*9880d681SAndroid Build Coastguard Worker
2310*9880d681SAndroid Build Coastguard Worker; VFAEB with !IN !RT.
2311*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaeb_0(<16 x i8> %a, <16 x i8> %b) {
2312*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaeb_0:
2313*9880d681SAndroid Build Coastguard Worker; CHECK: vfaeb %v24, %v24, %v26, 0
2314*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2315*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfaeb(<16 x i8> %a, <16 x i8> %b, i32 0)
2316*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2317*9880d681SAndroid Build Coastguard Worker}
2318*9880d681SAndroid Build Coastguard Worker
2319*9880d681SAndroid Build Coastguard Worker; VFAEB with !IN RT.
2320*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaeb_4(<16 x i8> %a, <16 x i8> %b) {
2321*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaeb_4:
2322*9880d681SAndroid Build Coastguard Worker; CHECK: vfaeb %v24, %v24, %v26, 4
2323*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2324*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfaeb(<16 x i8> %a, <16 x i8> %b, i32 4)
2325*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2326*9880d681SAndroid Build Coastguard Worker}
2327*9880d681SAndroid Build Coastguard Worker
2328*9880d681SAndroid Build Coastguard Worker; VFAEB with IN !RT.
2329*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaeb_8(<16 x i8> %a, <16 x i8> %b) {
2330*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaeb_8:
2331*9880d681SAndroid Build Coastguard Worker; CHECK: vfaeb %v24, %v24, %v26, 8
2332*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2333*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfaeb(<16 x i8> %a, <16 x i8> %b, i32 8)
2334*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2335*9880d681SAndroid Build Coastguard Worker}
2336*9880d681SAndroid Build Coastguard Worker
2337*9880d681SAndroid Build Coastguard Worker; VFAEB with IN RT.
2338*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaeb_12(<16 x i8> %a, <16 x i8> %b) {
2339*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaeb_12:
2340*9880d681SAndroid Build Coastguard Worker; CHECK: vfaeb %v24, %v24, %v26, 12
2341*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2342*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfaeb(<16 x i8> %a, <16 x i8> %b, i32 12)
2343*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2344*9880d681SAndroid Build Coastguard Worker}
2345*9880d681SAndroid Build Coastguard Worker
2346*9880d681SAndroid Build Coastguard Worker; VFAEB with CS -- should be ignored.
2347*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaeb_1(<16 x i8> %a, <16 x i8> %b) {
2348*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaeb_1:
2349*9880d681SAndroid Build Coastguard Worker; CHECK: vfaeb %v24, %v24, %v26, 0
2350*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2351*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfaeb(<16 x i8> %a, <16 x i8> %b, i32 1)
2352*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2353*9880d681SAndroid Build Coastguard Worker}
2354*9880d681SAndroid Build Coastguard Worker
2355*9880d681SAndroid Build Coastguard Worker; VFAEH.
2356*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfaeh(<8 x i16> %a, <8 x i16> %b) {
2357*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaeh:
2358*9880d681SAndroid Build Coastguard Worker; CHECK: vfaeh %v24, %v24, %v26, 4
2359*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2360*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vfaeh(<8 x i16> %a, <8 x i16> %b, i32 4)
2361*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2362*9880d681SAndroid Build Coastguard Worker}
2363*9880d681SAndroid Build Coastguard Worker
2364*9880d681SAndroid Build Coastguard Worker; VFAEF.
2365*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfaef(<4 x i32> %a, <4 x i32> %b) {
2366*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaef:
2367*9880d681SAndroid Build Coastguard Worker; CHECK: vfaef %v24, %v24, %v26, 8
2368*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2369*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vfaef(<4 x i32> %a, <4 x i32> %b, i32 8)
2370*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2371*9880d681SAndroid Build Coastguard Worker}
2372*9880d681SAndroid Build Coastguard Worker
2373*9880d681SAndroid Build Coastguard Worker; VFAEBS.
2374*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaebs(<16 x i8> %a, <16 x i8> %b, i32 *%ccptr) {
2375*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaebs:
2376*9880d681SAndroid Build Coastguard Worker; CHECK: vfaebs %v24, %v24, %v26, 0
2377*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2378*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2379*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2380*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2381*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vfaebs(<16 x i8> %a, <16 x i8> %b,
2382*9880d681SAndroid Build Coastguard Worker                                                  i32 0)
2383*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
2384*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
2385*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2386*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2387*9880d681SAndroid Build Coastguard Worker}
2388*9880d681SAndroid Build Coastguard Worker
2389*9880d681SAndroid Build Coastguard Worker; VFAEHS.
2390*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfaehs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) {
2391*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaehs:
2392*9880d681SAndroid Build Coastguard Worker; CHECK: vfaehs %v24, %v24, %v26, 4
2393*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2394*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2395*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2396*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2397*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vfaehs(<8 x i16> %a, <8 x i16> %b,
2398*9880d681SAndroid Build Coastguard Worker                                                  i32 4)
2399*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
2400*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
2401*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2402*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2403*9880d681SAndroid Build Coastguard Worker}
2404*9880d681SAndroid Build Coastguard Worker
2405*9880d681SAndroid Build Coastguard Worker; VFAEFS.
2406*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfaefs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) {
2407*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaefs:
2408*9880d681SAndroid Build Coastguard Worker; CHECK: vfaefs %v24, %v24, %v26, 8
2409*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2410*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2411*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2412*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2413*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vfaefs(<4 x i32> %a, <4 x i32> %b,
2414*9880d681SAndroid Build Coastguard Worker                                                  i32 8)
2415*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
2416*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
2417*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2418*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2419*9880d681SAndroid Build Coastguard Worker}
2420*9880d681SAndroid Build Coastguard Worker
2421*9880d681SAndroid Build Coastguard Worker; VFAEZB with !IN !RT.
2422*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaezb_0(<16 x i8> %a, <16 x i8> %b) {
2423*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezb_0:
2424*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezb %v24, %v24, %v26, 0
2425*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2426*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfaezb(<16 x i8> %a, <16 x i8> %b, i32 0)
2427*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2428*9880d681SAndroid Build Coastguard Worker}
2429*9880d681SAndroid Build Coastguard Worker
2430*9880d681SAndroid Build Coastguard Worker; VFAEZB with !IN RT.
2431*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaezb_4(<16 x i8> %a, <16 x i8> %b) {
2432*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezb_4:
2433*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezb %v24, %v24, %v26, 4
2434*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2435*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfaezb(<16 x i8> %a, <16 x i8> %b, i32 4)
2436*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2437*9880d681SAndroid Build Coastguard Worker}
2438*9880d681SAndroid Build Coastguard Worker
2439*9880d681SAndroid Build Coastguard Worker; VFAEZB with IN !RT.
2440*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaezb_8(<16 x i8> %a, <16 x i8> %b) {
2441*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezb_8:
2442*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezb %v24, %v24, %v26, 8
2443*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2444*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfaezb(<16 x i8> %a, <16 x i8> %b, i32 8)
2445*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2446*9880d681SAndroid Build Coastguard Worker}
2447*9880d681SAndroid Build Coastguard Worker
2448*9880d681SAndroid Build Coastguard Worker; VFAEZB with IN RT.
2449*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaezb_12(<16 x i8> %a, <16 x i8> %b) {
2450*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezb_12:
2451*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezb %v24, %v24, %v26, 12
2452*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2453*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfaezb(<16 x i8> %a, <16 x i8> %b, i32 12)
2454*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2455*9880d681SAndroid Build Coastguard Worker}
2456*9880d681SAndroid Build Coastguard Worker
2457*9880d681SAndroid Build Coastguard Worker; VFAEZB with CS -- should be ignored.
2458*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaezb_1(<16 x i8> %a, <16 x i8> %b) {
2459*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezb_1:
2460*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezb %v24, %v24, %v26, 0
2461*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2462*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfaezb(<16 x i8> %a, <16 x i8> %b, i32 1)
2463*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2464*9880d681SAndroid Build Coastguard Worker}
2465*9880d681SAndroid Build Coastguard Worker
2466*9880d681SAndroid Build Coastguard Worker; VFAEZH.
2467*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfaezh(<8 x i16> %a, <8 x i16> %b) {
2468*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezh:
2469*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezh %v24, %v24, %v26, 4
2470*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2471*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vfaezh(<8 x i16> %a, <8 x i16> %b, i32 4)
2472*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2473*9880d681SAndroid Build Coastguard Worker}
2474*9880d681SAndroid Build Coastguard Worker
2475*9880d681SAndroid Build Coastguard Worker; VFAEZF.
2476*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfaezf(<4 x i32> %a, <4 x i32> %b) {
2477*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezf:
2478*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezf %v24, %v24, %v26, 8
2479*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2480*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vfaezf(<4 x i32> %a, <4 x i32> %b, i32 8)
2481*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2482*9880d681SAndroid Build Coastguard Worker}
2483*9880d681SAndroid Build Coastguard Worker
2484*9880d681SAndroid Build Coastguard Worker; VFAEZBS.
2485*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfaezbs(<16 x i8> %a, <16 x i8> %b, i32 *%ccptr) {
2486*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezbs:
2487*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezbs %v24, %v24, %v26, 0
2488*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2489*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2490*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2491*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2492*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vfaezbs(<16 x i8> %a, <16 x i8> %b,
2493*9880d681SAndroid Build Coastguard Worker                                                   i32 0)
2494*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
2495*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
2496*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2497*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2498*9880d681SAndroid Build Coastguard Worker}
2499*9880d681SAndroid Build Coastguard Worker
2500*9880d681SAndroid Build Coastguard Worker; VFAEZHS.
2501*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfaezhs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) {
2502*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezhs:
2503*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezhs %v24, %v24, %v26, 4
2504*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2505*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2506*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2507*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2508*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vfaezhs(<8 x i16> %a, <8 x i16> %b,
2509*9880d681SAndroid Build Coastguard Worker                                                   i32 4)
2510*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
2511*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
2512*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2513*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2514*9880d681SAndroid Build Coastguard Worker}
2515*9880d681SAndroid Build Coastguard Worker
2516*9880d681SAndroid Build Coastguard Worker; VFAEZFS.
2517*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfaezfs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) {
2518*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfaezfs:
2519*9880d681SAndroid Build Coastguard Worker; CHECK: vfaezfs %v24, %v24, %v26, 8
2520*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2521*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2522*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2523*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2524*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vfaezfs(<4 x i32> %a, <4 x i32> %b,
2525*9880d681SAndroid Build Coastguard Worker                                                   i32 8)
2526*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
2527*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
2528*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2529*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2530*9880d681SAndroid Build Coastguard Worker}
2531*9880d681SAndroid Build Coastguard Worker
2532*9880d681SAndroid Build Coastguard Worker; VFEEB.
2533*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfeeb_0(<16 x i8> %a, <16 x i8> %b) {
2534*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeeb_0:
2535*9880d681SAndroid Build Coastguard Worker; CHECK: vfeeb %v24, %v24, %v26
2536*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2537*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfeeb(<16 x i8> %a, <16 x i8> %b)
2538*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2539*9880d681SAndroid Build Coastguard Worker}
2540*9880d681SAndroid Build Coastguard Worker
2541*9880d681SAndroid Build Coastguard Worker; VFEEH.
2542*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfeeh(<8 x i16> %a, <8 x i16> %b) {
2543*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeeh:
2544*9880d681SAndroid Build Coastguard Worker; CHECK: vfeeh %v24, %v24, %v26
2545*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2546*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vfeeh(<8 x i16> %a, <8 x i16> %b)
2547*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2548*9880d681SAndroid Build Coastguard Worker}
2549*9880d681SAndroid Build Coastguard Worker
2550*9880d681SAndroid Build Coastguard Worker; VFEEF.
2551*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfeef(<4 x i32> %a, <4 x i32> %b) {
2552*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeef:
2553*9880d681SAndroid Build Coastguard Worker; CHECK: vfeef %v24, %v24, %v26
2554*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2555*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vfeef(<4 x i32> %a, <4 x i32> %b)
2556*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2557*9880d681SAndroid Build Coastguard Worker}
2558*9880d681SAndroid Build Coastguard Worker
2559*9880d681SAndroid Build Coastguard Worker; VFEEBS.
2560*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfeebs(<16 x i8> %a, <16 x i8> %b, i32 *%ccptr) {
2561*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeebs:
2562*9880d681SAndroid Build Coastguard Worker; CHECK: vfeebs %v24, %v24, %v26
2563*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2564*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2565*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2566*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2567*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vfeebs(<16 x i8> %a, <16 x i8> %b)
2568*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
2569*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
2570*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2571*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2572*9880d681SAndroid Build Coastguard Worker}
2573*9880d681SAndroid Build Coastguard Worker
2574*9880d681SAndroid Build Coastguard Worker; VFEEHS.
2575*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfeehs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) {
2576*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeehs:
2577*9880d681SAndroid Build Coastguard Worker; CHECK: vfeehs %v24, %v24, %v26
2578*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2579*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2580*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2581*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2582*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vfeehs(<8 x i16> %a, <8 x i16> %b)
2583*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
2584*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
2585*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2586*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2587*9880d681SAndroid Build Coastguard Worker}
2588*9880d681SAndroid Build Coastguard Worker
2589*9880d681SAndroid Build Coastguard Worker; VFEEFS.
2590*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfeefs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) {
2591*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeefs:
2592*9880d681SAndroid Build Coastguard Worker; CHECK: vfeefs %v24, %v24, %v26
2593*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2594*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2595*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2596*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2597*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vfeefs(<4 x i32> %a, <4 x i32> %b)
2598*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
2599*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
2600*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2601*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2602*9880d681SAndroid Build Coastguard Worker}
2603*9880d681SAndroid Build Coastguard Worker
2604*9880d681SAndroid Build Coastguard Worker; VFEEZB.
2605*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfeezb(<16 x i8> %a, <16 x i8> %b) {
2606*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeezb:
2607*9880d681SAndroid Build Coastguard Worker; CHECK: vfeezb %v24, %v24, %v26
2608*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2609*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfeezb(<16 x i8> %a, <16 x i8> %b)
2610*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2611*9880d681SAndroid Build Coastguard Worker}
2612*9880d681SAndroid Build Coastguard Worker
2613*9880d681SAndroid Build Coastguard Worker; VFEEZH.
2614*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfeezh(<8 x i16> %a, <8 x i16> %b) {
2615*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeezh:
2616*9880d681SAndroid Build Coastguard Worker; CHECK: vfeezh %v24, %v24, %v26
2617*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2618*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vfeezh(<8 x i16> %a, <8 x i16> %b)
2619*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2620*9880d681SAndroid Build Coastguard Worker}
2621*9880d681SAndroid Build Coastguard Worker
2622*9880d681SAndroid Build Coastguard Worker; VFEEZF.
2623*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfeezf(<4 x i32> %a, <4 x i32> %b) {
2624*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeezf:
2625*9880d681SAndroid Build Coastguard Worker; CHECK: vfeezf %v24, %v24, %v26
2626*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2627*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vfeezf(<4 x i32> %a, <4 x i32> %b)
2628*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2629*9880d681SAndroid Build Coastguard Worker}
2630*9880d681SAndroid Build Coastguard Worker
2631*9880d681SAndroid Build Coastguard Worker; VFEEZBS.
2632*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfeezbs(<16 x i8> %a, <16 x i8> %b, i32 *%ccptr) {
2633*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeezbs:
2634*9880d681SAndroid Build Coastguard Worker; CHECK: vfeezbs %v24, %v24, %v26
2635*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2636*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2637*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2638*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2639*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vfeezbs(<16 x i8> %a, <16 x i8> %b)
2640*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
2641*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
2642*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2643*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2644*9880d681SAndroid Build Coastguard Worker}
2645*9880d681SAndroid Build Coastguard Worker
2646*9880d681SAndroid Build Coastguard Worker; VFEEZHS.
2647*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfeezhs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) {
2648*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeezhs:
2649*9880d681SAndroid Build Coastguard Worker; CHECK: vfeezhs %v24, %v24, %v26
2650*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2651*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2652*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2653*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2654*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vfeezhs(<8 x i16> %a, <8 x i16> %b)
2655*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
2656*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
2657*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2658*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2659*9880d681SAndroid Build Coastguard Worker}
2660*9880d681SAndroid Build Coastguard Worker
2661*9880d681SAndroid Build Coastguard Worker; VFEEZFS.
2662*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfeezfs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) {
2663*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeezfs:
2664*9880d681SAndroid Build Coastguard Worker; CHECK: vfeezfs %v24, %v24, %v26
2665*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2666*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2667*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2668*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2669*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vfeezfs(<4 x i32> %a, <4 x i32> %b)
2670*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
2671*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
2672*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2673*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2674*9880d681SAndroid Build Coastguard Worker}
2675*9880d681SAndroid Build Coastguard Worker
2676*9880d681SAndroid Build Coastguard Worker; VFENEB.
2677*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfeneb_0(<16 x i8> %a, <16 x i8> %b) {
2678*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeneb_0:
2679*9880d681SAndroid Build Coastguard Worker; CHECK: vfeneb %v24, %v24, %v26
2680*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2681*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfeneb(<16 x i8> %a, <16 x i8> %b)
2682*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2683*9880d681SAndroid Build Coastguard Worker}
2684*9880d681SAndroid Build Coastguard Worker
2685*9880d681SAndroid Build Coastguard Worker; VFENEH.
2686*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfeneh(<8 x i16> %a, <8 x i16> %b) {
2687*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfeneh:
2688*9880d681SAndroid Build Coastguard Worker; CHECK: vfeneh %v24, %v24, %v26
2689*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2690*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vfeneh(<8 x i16> %a, <8 x i16> %b)
2691*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2692*9880d681SAndroid Build Coastguard Worker}
2693*9880d681SAndroid Build Coastguard Worker
2694*9880d681SAndroid Build Coastguard Worker; VFENEF.
2695*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfenef(<4 x i32> %a, <4 x i32> %b) {
2696*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenef:
2697*9880d681SAndroid Build Coastguard Worker; CHECK: vfenef %v24, %v24, %v26
2698*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2699*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vfenef(<4 x i32> %a, <4 x i32> %b)
2700*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2701*9880d681SAndroid Build Coastguard Worker}
2702*9880d681SAndroid Build Coastguard Worker
2703*9880d681SAndroid Build Coastguard Worker; VFENEBS.
2704*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfenebs(<16 x i8> %a, <16 x i8> %b, i32 *%ccptr) {
2705*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenebs:
2706*9880d681SAndroid Build Coastguard Worker; CHECK: vfenebs %v24, %v24, %v26
2707*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2708*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2709*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2710*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2711*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vfenebs(<16 x i8> %a, <16 x i8> %b)
2712*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
2713*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
2714*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2715*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2716*9880d681SAndroid Build Coastguard Worker}
2717*9880d681SAndroid Build Coastguard Worker
2718*9880d681SAndroid Build Coastguard Worker; VFENEHS.
2719*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfenehs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) {
2720*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenehs:
2721*9880d681SAndroid Build Coastguard Worker; CHECK: vfenehs %v24, %v24, %v26
2722*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2723*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2724*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2725*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2726*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vfenehs(<8 x i16> %a, <8 x i16> %b)
2727*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
2728*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
2729*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2730*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2731*9880d681SAndroid Build Coastguard Worker}
2732*9880d681SAndroid Build Coastguard Worker
2733*9880d681SAndroid Build Coastguard Worker; VFENEFS.
2734*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfenefs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) {
2735*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenefs:
2736*9880d681SAndroid Build Coastguard Worker; CHECK: vfenefs %v24, %v24, %v26
2737*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2738*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2739*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2740*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2741*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vfenefs(<4 x i32> %a, <4 x i32> %b)
2742*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
2743*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
2744*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2745*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2746*9880d681SAndroid Build Coastguard Worker}
2747*9880d681SAndroid Build Coastguard Worker
2748*9880d681SAndroid Build Coastguard Worker; VFENEZB.
2749*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfenezb(<16 x i8> %a, <16 x i8> %b) {
2750*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenezb:
2751*9880d681SAndroid Build Coastguard Worker; CHECK: vfenezb %v24, %v24, %v26
2752*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2753*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vfenezb(<16 x i8> %a, <16 x i8> %b)
2754*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2755*9880d681SAndroid Build Coastguard Worker}
2756*9880d681SAndroid Build Coastguard Worker
2757*9880d681SAndroid Build Coastguard Worker; VFENEZH.
2758*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfenezh(<8 x i16> %a, <8 x i16> %b) {
2759*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenezh:
2760*9880d681SAndroid Build Coastguard Worker; CHECK: vfenezh %v24, %v24, %v26
2761*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2762*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vfenezh(<8 x i16> %a, <8 x i16> %b)
2763*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2764*9880d681SAndroid Build Coastguard Worker}
2765*9880d681SAndroid Build Coastguard Worker
2766*9880d681SAndroid Build Coastguard Worker; VFENEZF.
2767*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfenezf(<4 x i32> %a, <4 x i32> %b) {
2768*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenezf:
2769*9880d681SAndroid Build Coastguard Worker; CHECK: vfenezf %v24, %v24, %v26
2770*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2771*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vfenezf(<4 x i32> %a, <4 x i32> %b)
2772*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2773*9880d681SAndroid Build Coastguard Worker}
2774*9880d681SAndroid Build Coastguard Worker
2775*9880d681SAndroid Build Coastguard Worker; VFENEZBS.
2776*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vfenezbs(<16 x i8> %a, <16 x i8> %b, i32 *%ccptr) {
2777*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenezbs:
2778*9880d681SAndroid Build Coastguard Worker; CHECK: vfenezbs %v24, %v24, %v26
2779*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2780*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2781*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2782*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2783*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vfenezbs(<16 x i8> %a, <16 x i8> %b)
2784*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
2785*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
2786*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2787*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2788*9880d681SAndroid Build Coastguard Worker}
2789*9880d681SAndroid Build Coastguard Worker
2790*9880d681SAndroid Build Coastguard Worker; VFENEZHS.
2791*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vfenezhs(<8 x i16> %a, <8 x i16> %b, i32 *%ccptr) {
2792*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenezhs:
2793*9880d681SAndroid Build Coastguard Worker; CHECK: vfenezhs %v24, %v24, %v26
2794*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2795*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2796*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2797*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2798*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vfenezhs(<8 x i16> %a, <8 x i16> %b)
2799*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
2800*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
2801*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2802*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2803*9880d681SAndroid Build Coastguard Worker}
2804*9880d681SAndroid Build Coastguard Worker
2805*9880d681SAndroid Build Coastguard Worker; VFENEZFS.
2806*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vfenezfs(<4 x i32> %a, <4 x i32> %b, i32 *%ccptr) {
2807*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfenezfs:
2808*9880d681SAndroid Build Coastguard Worker; CHECK: vfenezfs %v24, %v24, %v26
2809*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2810*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2811*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2812*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2813*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vfenezfs(<4 x i32> %a, <4 x i32> %b)
2814*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
2815*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
2816*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2817*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2818*9880d681SAndroid Build Coastguard Worker}
2819*9880d681SAndroid Build Coastguard Worker
2820*9880d681SAndroid Build Coastguard Worker; VISTRB.
2821*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vistrb(<16 x i8> %a) {
2822*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vistrb:
2823*9880d681SAndroid Build Coastguard Worker; CHECK: vistrb %v24, %v24
2824*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2825*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vistrb(<16 x i8> %a)
2826*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2827*9880d681SAndroid Build Coastguard Worker}
2828*9880d681SAndroid Build Coastguard Worker
2829*9880d681SAndroid Build Coastguard Worker; VISTRH.
2830*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vistrh(<8 x i16> %a) {
2831*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vistrh:
2832*9880d681SAndroid Build Coastguard Worker; CHECK: vistrh %v24, %v24
2833*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2834*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vistrh(<8 x i16> %a)
2835*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2836*9880d681SAndroid Build Coastguard Worker}
2837*9880d681SAndroid Build Coastguard Worker
2838*9880d681SAndroid Build Coastguard Worker; VISTRF.
2839*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vistrf(<4 x i32> %a) {
2840*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vistrf:
2841*9880d681SAndroid Build Coastguard Worker; CHECK: vistrf %v24, %v24
2842*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2843*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vistrf(<4 x i32> %a)
2844*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2845*9880d681SAndroid Build Coastguard Worker}
2846*9880d681SAndroid Build Coastguard Worker
2847*9880d681SAndroid Build Coastguard Worker; VISTRBS.
2848*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vistrbs(<16 x i8> %a, i32 *%ccptr) {
2849*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vistrbs:
2850*9880d681SAndroid Build Coastguard Worker; CHECK: vistrbs %v24, %v24
2851*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2852*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2853*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2854*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2855*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vistrbs(<16 x i8> %a)
2856*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
2857*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
2858*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2859*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2860*9880d681SAndroid Build Coastguard Worker}
2861*9880d681SAndroid Build Coastguard Worker
2862*9880d681SAndroid Build Coastguard Worker; VISTRHS.
2863*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vistrhs(<8 x i16> %a, i32 *%ccptr) {
2864*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vistrhs:
2865*9880d681SAndroid Build Coastguard Worker; CHECK: vistrhs %v24, %v24
2866*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2867*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2868*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2869*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2870*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vistrhs(<8 x i16> %a)
2871*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
2872*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
2873*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2874*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2875*9880d681SAndroid Build Coastguard Worker}
2876*9880d681SAndroid Build Coastguard Worker
2877*9880d681SAndroid Build Coastguard Worker; VISTRFS.
2878*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vistrfs(<4 x i32> %a, i32 *%ccptr) {
2879*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vistrfs:
2880*9880d681SAndroid Build Coastguard Worker; CHECK: vistrfs %v24, %v24
2881*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2882*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2883*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2884*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2885*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vistrfs(<4 x i32> %a)
2886*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
2887*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
2888*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2889*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2890*9880d681SAndroid Build Coastguard Worker}
2891*9880d681SAndroid Build Coastguard Worker
2892*9880d681SAndroid Build Coastguard Worker; VSTRCB with !IN !RT.
2893*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrcb_0(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
2894*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcb_0:
2895*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcb %v24, %v24, %v26, %v28, 0
2896*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2897*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vstrcb(<16 x i8> %a, <16 x i8> %b,
2898*9880d681SAndroid Build Coastguard Worker                                          <16 x i8> %c, i32 0)
2899*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2900*9880d681SAndroid Build Coastguard Worker}
2901*9880d681SAndroid Build Coastguard Worker
2902*9880d681SAndroid Build Coastguard Worker; VSTRCB with !IN RT.
2903*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrcb_4(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
2904*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcb_4:
2905*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcb %v24, %v24, %v26, %v28, 4
2906*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2907*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vstrcb(<16 x i8> %a, <16 x i8> %b,
2908*9880d681SAndroid Build Coastguard Worker                                          <16 x i8> %c, i32 4)
2909*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2910*9880d681SAndroid Build Coastguard Worker}
2911*9880d681SAndroid Build Coastguard Worker
2912*9880d681SAndroid Build Coastguard Worker; VSTRCB with IN !RT.
2913*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrcb_8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
2914*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcb_8:
2915*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcb %v24, %v24, %v26, %v28, 8
2916*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2917*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vstrcb(<16 x i8> %a, <16 x i8> %b,
2918*9880d681SAndroid Build Coastguard Worker                                          <16 x i8> %c, i32 8)
2919*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2920*9880d681SAndroid Build Coastguard Worker}
2921*9880d681SAndroid Build Coastguard Worker
2922*9880d681SAndroid Build Coastguard Worker; VSTRCB with IN RT.
2923*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrcb_12(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
2924*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcb_12:
2925*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcb %v24, %v24, %v26, %v28, 12
2926*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2927*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vstrcb(<16 x i8> %a, <16 x i8> %b,
2928*9880d681SAndroid Build Coastguard Worker                                          <16 x i8> %c, i32 12)
2929*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2930*9880d681SAndroid Build Coastguard Worker}
2931*9880d681SAndroid Build Coastguard Worker
2932*9880d681SAndroid Build Coastguard Worker; VSTRCB with CS -- should be ignored.
2933*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrcb_1(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
2934*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcb_1:
2935*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcb %v24, %v24, %v26, %v28, 0
2936*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2937*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vstrcb(<16 x i8> %a, <16 x i8> %b,
2938*9880d681SAndroid Build Coastguard Worker                                          <16 x i8> %c, i32 1)
2939*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2940*9880d681SAndroid Build Coastguard Worker}
2941*9880d681SAndroid Build Coastguard Worker
2942*9880d681SAndroid Build Coastguard Worker; VSTRCH.
2943*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vstrch(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {
2944*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrch:
2945*9880d681SAndroid Build Coastguard Worker; CHECK: vstrch %v24, %v24, %v26, %v28, 4
2946*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2947*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vstrch(<8 x i16> %a, <8 x i16> %b,
2948*9880d681SAndroid Build Coastguard Worker                                          <8 x i16> %c, i32 4)
2949*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2950*9880d681SAndroid Build Coastguard Worker}
2951*9880d681SAndroid Build Coastguard Worker
2952*9880d681SAndroid Build Coastguard Worker; VSTRCF.
2953*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vstrcf(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
2954*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcf:
2955*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcf %v24, %v24, %v26, %v28, 8
2956*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2957*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vstrcf(<4 x i32> %a, <4 x i32> %b,
2958*9880d681SAndroid Build Coastguard Worker                                          <4 x i32> %c, i32 8)
2959*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
2960*9880d681SAndroid Build Coastguard Worker}
2961*9880d681SAndroid Build Coastguard Worker
2962*9880d681SAndroid Build Coastguard Worker; VSTRCBS.
2963*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrcbs(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c,
2964*9880d681SAndroid Build Coastguard Worker                               i32 *%ccptr) {
2965*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcbs:
2966*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcbs %v24, %v24, %v26, %v28, 0
2967*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2968*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2969*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2970*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2971*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vstrcbs(<16 x i8> %a, <16 x i8> %b,
2972*9880d681SAndroid Build Coastguard Worker                                                   <16 x i8> %c, i32 0)
2973*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
2974*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
2975*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2976*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
2977*9880d681SAndroid Build Coastguard Worker}
2978*9880d681SAndroid Build Coastguard Worker
2979*9880d681SAndroid Build Coastguard Worker; VSTRCHS.
2980*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vstrchs(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c,
2981*9880d681SAndroid Build Coastguard Worker                               i32 *%ccptr) {
2982*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrchs:
2983*9880d681SAndroid Build Coastguard Worker; CHECK: vstrchs %v24, %v24, %v26, %v28, 4
2984*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
2985*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
2986*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
2987*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
2988*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vstrchs(<8 x i16> %a, <8 x i16> %b,
2989*9880d681SAndroid Build Coastguard Worker                                                   <8 x i16> %c, i32 4)
2990*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
2991*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
2992*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
2993*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
2994*9880d681SAndroid Build Coastguard Worker}
2995*9880d681SAndroid Build Coastguard Worker
2996*9880d681SAndroid Build Coastguard Worker; VSTRCFS.
2997*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vstrcfs(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c,
2998*9880d681SAndroid Build Coastguard Worker                               i32 *%ccptr) {
2999*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrcfs:
3000*9880d681SAndroid Build Coastguard Worker; CHECK: vstrcfs %v24, %v24, %v26, %v28, 8
3001*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
3002*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
3003*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
3004*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3005*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vstrcfs(<4 x i32> %a, <4 x i32> %b,
3006*9880d681SAndroid Build Coastguard Worker                                                   <4 x i32> %c, i32 8)
3007*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
3008*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
3009*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
3010*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
3011*9880d681SAndroid Build Coastguard Worker}
3012*9880d681SAndroid Build Coastguard Worker
3013*9880d681SAndroid Build Coastguard Worker; VSTRCZB with !IN !RT.
3014*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrczb_0(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
3015*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczb_0:
3016*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczb %v24, %v24, %v26, %v28, 0
3017*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3018*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vstrczb(<16 x i8> %a, <16 x i8> %b,
3019*9880d681SAndroid Build Coastguard Worker                                           <16 x i8> %c, i32 0)
3020*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
3021*9880d681SAndroid Build Coastguard Worker}
3022*9880d681SAndroid Build Coastguard Worker
3023*9880d681SAndroid Build Coastguard Worker; VSTRCZB with !IN RT.
3024*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrczb_4(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
3025*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczb_4:
3026*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczb %v24, %v24, %v26, %v28, 4
3027*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3028*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vstrczb(<16 x i8> %a, <16 x i8> %b,
3029*9880d681SAndroid Build Coastguard Worker                                           <16 x i8> %c, i32 4)
3030*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
3031*9880d681SAndroid Build Coastguard Worker}
3032*9880d681SAndroid Build Coastguard Worker
3033*9880d681SAndroid Build Coastguard Worker; VSTRCZB with IN !RT.
3034*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrczb_8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
3035*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczb_8:
3036*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczb %v24, %v24, %v26, %v28, 8
3037*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3038*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vstrczb(<16 x i8> %a, <16 x i8> %b,
3039*9880d681SAndroid Build Coastguard Worker                                           <16 x i8> %c, i32 8)
3040*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
3041*9880d681SAndroid Build Coastguard Worker}
3042*9880d681SAndroid Build Coastguard Worker
3043*9880d681SAndroid Build Coastguard Worker; VSTRCZB with IN RT.
3044*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrczb_12(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
3045*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczb_12:
3046*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczb %v24, %v24, %v26, %v28, 12
3047*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3048*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vstrczb(<16 x i8> %a, <16 x i8> %b,
3049*9880d681SAndroid Build Coastguard Worker                                           <16 x i8> %c, i32 12)
3050*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
3051*9880d681SAndroid Build Coastguard Worker}
3052*9880d681SAndroid Build Coastguard Worker
3053*9880d681SAndroid Build Coastguard Worker; VSTRCZB with CS -- should be ignored.
3054*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrczb_1(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
3055*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczb_1:
3056*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczb %v24, %v24, %v26, %v28, 0
3057*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3058*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i8> @llvm.s390.vstrczb(<16 x i8> %a, <16 x i8> %b,
3059*9880d681SAndroid Build Coastguard Worker                                           <16 x i8> %c, i32 1)
3060*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
3061*9880d681SAndroid Build Coastguard Worker}
3062*9880d681SAndroid Build Coastguard Worker
3063*9880d681SAndroid Build Coastguard Worker; VSTRCZH.
3064*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vstrczh(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {
3065*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczh:
3066*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczh %v24, %v24, %v26, %v28, 4
3067*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3068*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i16> @llvm.s390.vstrczh(<8 x i16> %a, <8 x i16> %b,
3069*9880d681SAndroid Build Coastguard Worker                                           <8 x i16> %c,  i32 4)
3070*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
3071*9880d681SAndroid Build Coastguard Worker}
3072*9880d681SAndroid Build Coastguard Worker
3073*9880d681SAndroid Build Coastguard Worker; VSTRCZF.
3074*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vstrczf(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
3075*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczf:
3076*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczf %v24, %v24, %v26, %v28, 8
3077*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3078*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.s390.vstrczf(<4 x i32> %a, <4 x i32> %b,
3079*9880d681SAndroid Build Coastguard Worker                                           <4 x i32> %c, i32 8)
3080*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
3081*9880d681SAndroid Build Coastguard Worker}
3082*9880d681SAndroid Build Coastguard Worker
3083*9880d681SAndroid Build Coastguard Worker; VSTRCZBS.
3084*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vstrczbs(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c,
3085*9880d681SAndroid Build Coastguard Worker                                i32 *%ccptr) {
3086*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczbs:
3087*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczbs %v24, %v24, %v26, %v28, 0
3088*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
3089*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
3090*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
3091*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3092*9880d681SAndroid Build Coastguard Worker  %call = call {<16 x i8>, i32} @llvm.s390.vstrczbs(<16 x i8> %a, <16 x i8> %b,
3093*9880d681SAndroid Build Coastguard Worker                                                    <16 x i8> %c, i32 0)
3094*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<16 x i8>, i32} %call, 0
3095*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<16 x i8>, i32} %call, 1
3096*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
3097*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %res
3098*9880d681SAndroid Build Coastguard Worker}
3099*9880d681SAndroid Build Coastguard Worker
3100*9880d681SAndroid Build Coastguard Worker; VSTRCZHS.
3101*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vstrczhs(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c,
3102*9880d681SAndroid Build Coastguard Worker                                i32 *%ccptr) {
3103*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczhs:
3104*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczhs %v24, %v24, %v26, %v28, 4
3105*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
3106*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
3107*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
3108*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3109*9880d681SAndroid Build Coastguard Worker  %call = call {<8 x i16>, i32} @llvm.s390.vstrczhs(<8 x i16> %a, <8 x i16> %b,
3110*9880d681SAndroid Build Coastguard Worker                                                    <8 x i16> %c, i32 4)
3111*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<8 x i16>, i32} %call, 0
3112*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<8 x i16>, i32} %call, 1
3113*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
3114*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %res
3115*9880d681SAndroid Build Coastguard Worker}
3116*9880d681SAndroid Build Coastguard Worker
3117*9880d681SAndroid Build Coastguard Worker; VSTRCZFS.
3118*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vstrczfs(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c,
3119*9880d681SAndroid Build Coastguard Worker                                i32 *%ccptr) {
3120*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vstrczfs:
3121*9880d681SAndroid Build Coastguard Worker; CHECK: vstrczfs %v24, %v24, %v26, %v28, 8
3122*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
3123*9880d681SAndroid Build Coastguard Worker; CHECK: srl [[REG]], 28
3124*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REG]], 0(%r2)
3125*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3126*9880d681SAndroid Build Coastguard Worker  %call = call {<4 x i32>, i32} @llvm.s390.vstrczfs(<4 x i32> %a, <4 x i32> %b,
3127*9880d681SAndroid Build Coastguard Worker                                                    <4 x i32> %c, i32 8)
3128*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<4 x i32>, i32} %call, 0
3129*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<4 x i32>, i32} %call, 1
3130*9880d681SAndroid Build Coastguard Worker  store i32 %cc, i32 *%ccptr
3131*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
3132*9880d681SAndroid Build Coastguard Worker}
3133*9880d681SAndroid Build Coastguard Worker
3134*9880d681SAndroid Build Coastguard Worker; VFCEDBS with no processing of the result.
3135*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vfcedbs(<2 x double> %a, <2 x double> %b) {
3136*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfcedbs:
3137*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedbs {{%v[0-9]+}}, %v24, %v26
3138*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
3139*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
3140*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3141*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vfcedbs(<2 x double> %a,
3142*9880d681SAndroid Build Coastguard Worker                                                   <2 x double> %b)
3143*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
3144*9880d681SAndroid Build Coastguard Worker  ret i32 %res
3145*9880d681SAndroid Build Coastguard Worker}
3146*9880d681SAndroid Build Coastguard Worker
3147*9880d681SAndroid Build Coastguard Worker; VFCEDBS, returning 1 if any elements are equal (CC != 3).
3148*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vfcedbs_any_bool(<2 x double> %a, <2 x double> %b) {
3149*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfcedbs_any_bool:
3150*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedbs {{%v[0-9]+}}, %v24, %v26
3151*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
3152*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -536870912
3153*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31
3154*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3155*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vfcedbs(<2 x double> %a,
3156*9880d681SAndroid Build Coastguard Worker                                                   <2 x double> %b)
3157*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
3158*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ne i32 %res, 3
3159*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
3160*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
3161*9880d681SAndroid Build Coastguard Worker}
3162*9880d681SAndroid Build Coastguard Worker
3163*9880d681SAndroid Build Coastguard Worker; VFCEDBS, storing to %ptr if any elements are equal.
3164*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vfcedbs_any_store(<2 x double> %a, <2 x double> %b,
3165*9880d681SAndroid Build Coastguard Worker                                         i32 *%ptr) {
3166*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfcedbs_any_store:
3167*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
3168*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedbs %v24, %v24, %v26
3169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bor|bnler}} %r14
3170*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
3171*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3172*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vfcedbs(<2 x double> %a,
3173*9880d681SAndroid Build Coastguard Worker                                                   <2 x double> %b)
3174*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 0
3175*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<2 x i64>, i32} %call, 1
3176*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ule i32 %cc, 2
3177*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
3178*9880d681SAndroid Build Coastguard Worker
3179*9880d681SAndroid Build Coastguard Workerstore:
3180*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
3181*9880d681SAndroid Build Coastguard Worker  br label %exit
3182*9880d681SAndroid Build Coastguard Worker
3183*9880d681SAndroid Build Coastguard Workerexit:
3184*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
3185*9880d681SAndroid Build Coastguard Worker}
3186*9880d681SAndroid Build Coastguard Worker
3187*9880d681SAndroid Build Coastguard Worker; VFCHDBS with no processing of the result.
3188*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vfchdbs(<2 x double> %a, <2 x double> %b) {
3189*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfchdbs:
3190*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdbs {{%v[0-9]+}}, %v24, %v26
3191*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
3192*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
3193*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3194*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vfchdbs(<2 x double> %a,
3195*9880d681SAndroid Build Coastguard Worker                                                   <2 x double> %b)
3196*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
3197*9880d681SAndroid Build Coastguard Worker  ret i32 %res
3198*9880d681SAndroid Build Coastguard Worker}
3199*9880d681SAndroid Build Coastguard Worker
3200*9880d681SAndroid Build Coastguard Worker; VFCHDBS, returning 1 if not all elements are higher.
3201*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vfchdbs_notall_bool(<2 x double> %a, <2 x double> %b) {
3202*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfchdbs_notall_bool:
3203*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdbs {{%v[0-9]+}}, %v24, %v26
3204*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
3205*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 36
3206*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3207*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vfchdbs(<2 x double> %a,
3208*9880d681SAndroid Build Coastguard Worker                                                   <2 x double> %b)
3209*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
3210*9880d681SAndroid Build Coastguard Worker  %cmp = icmp sge i32 %res, 1
3211*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
3212*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
3213*9880d681SAndroid Build Coastguard Worker}
3214*9880d681SAndroid Build Coastguard Worker
3215*9880d681SAndroid Build Coastguard Worker; VFCHDBS, storing to %ptr if not all elements are higher.
3216*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vfchdbs_notall_store(<2 x double> %a, <2 x double> %b,
3217*9880d681SAndroid Build Coastguard Worker                                            i32 *%ptr) {
3218*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfchdbs_notall_store:
3219*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
3220*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdbs %v24, %v24, %v26
3221*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bher|ber}} %r14
3222*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
3223*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3224*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vfchdbs(<2 x double> %a,
3225*9880d681SAndroid Build Coastguard Worker                                                   <2 x double> %b)
3226*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 0
3227*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<2 x i64>, i32} %call, 1
3228*9880d681SAndroid Build Coastguard Worker  %cmp = icmp ugt i32 %cc, 0
3229*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
3230*9880d681SAndroid Build Coastguard Worker
3231*9880d681SAndroid Build Coastguard Workerstore:
3232*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
3233*9880d681SAndroid Build Coastguard Worker  br label %exit
3234*9880d681SAndroid Build Coastguard Worker
3235*9880d681SAndroid Build Coastguard Workerexit:
3236*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
3237*9880d681SAndroid Build Coastguard Worker}
3238*9880d681SAndroid Build Coastguard Worker
3239*9880d681SAndroid Build Coastguard Worker; VFCHEDBS with no processing of the result.
3240*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vfchedbs(<2 x double> %a, <2 x double> %b) {
3241*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfchedbs:
3242*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedbs {{%v[0-9]+}}, %v24, %v26
3243*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
3244*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
3245*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3246*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vfchedbs(<2 x double> %a,
3247*9880d681SAndroid Build Coastguard Worker						    <2 x double> %b)
3248*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
3249*9880d681SAndroid Build Coastguard Worker  ret i32 %res
3250*9880d681SAndroid Build Coastguard Worker}
3251*9880d681SAndroid Build Coastguard Worker
3252*9880d681SAndroid Build Coastguard Worker; VFCHEDBS, returning 1 if neither element is higher or equal.
3253*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vfchedbs_none_bool(<2 x double> %a, <2 x double> %b) {
3254*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfchedbs_none_bool:
3255*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedbs {{%v[0-9]+}}, %v24, %v26
3256*9880d681SAndroid Build Coastguard Worker; CHECK: ipm [[REG:%r[0-5]]]
3257*9880d681SAndroid Build Coastguard Worker; CHECK: risblg %r2, [[REG]], 31, 159, 35
3258*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3259*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vfchedbs(<2 x double> %a,
3260*9880d681SAndroid Build Coastguard Worker						    <2 x double> %b)
3261*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
3262*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %res, 3
3263*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
3264*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
3265*9880d681SAndroid Build Coastguard Worker}
3266*9880d681SAndroid Build Coastguard Worker
3267*9880d681SAndroid Build Coastguard Worker; VFCHEDBS, storing to %ptr if neither element is higher or equal.
3268*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vfchedbs_none_store(<2 x double> %a, <2 x double> %b,
3269*9880d681SAndroid Build Coastguard Worker                                           i32 *%ptr) {
3270*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfchedbs_none_store:
3271*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r
3272*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedbs %v24, %v24, %v26
3273*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: {{bnor|bler}} %r14
3274*9880d681SAndroid Build Coastguard Worker; CHECK: mvhi 0(%r2), 0
3275*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3276*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vfchedbs(<2 x double> %a,
3277*9880d681SAndroid Build Coastguard Worker						    <2 x double> %b)
3278*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 0
3279*9880d681SAndroid Build Coastguard Worker  %cc = extractvalue {<2 x i64>, i32} %call, 1
3280*9880d681SAndroid Build Coastguard Worker  %cmp = icmp uge i32 %cc, 3
3281*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %store, label %exit
3282*9880d681SAndroid Build Coastguard Worker
3283*9880d681SAndroid Build Coastguard Workerstore:
3284*9880d681SAndroid Build Coastguard Worker  store i32 0, i32 *%ptr
3285*9880d681SAndroid Build Coastguard Worker  br label %exit
3286*9880d681SAndroid Build Coastguard Worker
3287*9880d681SAndroid Build Coastguard Workerexit:
3288*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
3289*9880d681SAndroid Build Coastguard Worker}
3290*9880d681SAndroid Build Coastguard Worker
3291*9880d681SAndroid Build Coastguard Worker; VFTCIDB with the lowest useful class selector and no processing of the result.
3292*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vftcidb(<2 x double> %a) {
3293*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vftcidb:
3294*9880d681SAndroid Build Coastguard Worker; CHECK: vftcidb {{%v[0-9]+}}, %v24, 1
3295*9880d681SAndroid Build Coastguard Worker; CHECK: ipm %r2
3296*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 28
3297*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3298*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vftcidb(<2 x double> %a, i32 1)
3299*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
3300*9880d681SAndroid Build Coastguard Worker  ret i32 %res
3301*9880d681SAndroid Build Coastguard Worker}
3302*9880d681SAndroid Build Coastguard Worker
3303*9880d681SAndroid Build Coastguard Worker; VFTCIDB with the highest useful class selector, returning 1 if all elements
3304*9880d681SAndroid Build Coastguard Worker; have the right class (CC == 0).
3305*9880d681SAndroid Build Coastguard Workerdefine i32 @test_vftcidb_all_bool(<2 x double> %a) {
3306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vftcidb_all_bool:
3307*9880d681SAndroid Build Coastguard Worker; CHECK: vftcidb {{%v[0-9]+}}, %v24, 4094
3308*9880d681SAndroid Build Coastguard Worker; CHECK: afi %r2, -268435456
3309*9880d681SAndroid Build Coastguard Worker; CHECK: srl %r2, 31
3310*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3311*9880d681SAndroid Build Coastguard Worker  %call = call {<2 x i64>, i32} @llvm.s390.vftcidb(<2 x double> %a, i32 4094)
3312*9880d681SAndroid Build Coastguard Worker  %res = extractvalue {<2 x i64>, i32} %call, 1
3313*9880d681SAndroid Build Coastguard Worker  %cmp = icmp eq i32 %res, 0
3314*9880d681SAndroid Build Coastguard Worker  %ext = zext i1 %cmp to i32
3315*9880d681SAndroid Build Coastguard Worker  ret i32 %ext
3316*9880d681SAndroid Build Coastguard Worker}
3317*9880d681SAndroid Build Coastguard Worker
3318*9880d681SAndroid Build Coastguard Worker; VFIDB with a rounding mode not usable via standard intrinsics.
3319*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vfidb_0_4(<2 x double> %a) {
3320*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfidb_0_4:
3321*9880d681SAndroid Build Coastguard Worker; CHECK: vfidb %v24, %v24, 0, 4
3322*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3323*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.s390.vfidb(<2 x double> %a, i32 0, i32 4)
3324*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
3325*9880d681SAndroid Build Coastguard Worker}
3326*9880d681SAndroid Build Coastguard Worker
3327*9880d681SAndroid Build Coastguard Worker; VFIDB with IEEE-inexact exception suppressed.
3328*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_vfidb_4_0(<2 x double> %a) {
3329*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_vfidb_4_0:
3330*9880d681SAndroid Build Coastguard Worker; CHECK: vfidb %v24, %v24, 4, 0
3331*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
3332*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.s390.vfidb(<2 x double> %a, i32 4, i32 0)
3333*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
3334*9880d681SAndroid Build Coastguard Worker}
3335*9880d681SAndroid Build Coastguard Worker
3336