xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx-isa-check.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; check AVX2 instructions that are disabled in case avx512VL/avx512BW present
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=corei7-avx                             -o /dev/null
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=core-avx2 -mattr=+avx2                 -o /dev/null
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=knl                                    -o /dev/null
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=knl  -mattr=+avx512vl                  -o /dev/null
7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=knl  -mattr=+avx512bw                  -o /dev/null
8*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=knl  -mattr=+avx512vl -mattr=+avx512bw -o /dev/null
9*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -show-mc-encoding -mcpu=skx                                    -o /dev/null
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpand_256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp {
12*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
13*9880d681SAndroid Build Coastguard Worker  %a2 = add <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1>
14*9880d681SAndroid Build Coastguard Worker  %x = and <4 x i64> %a2, %b
15*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
16*9880d681SAndroid Build Coastguard Worker}
17*9880d681SAndroid Build Coastguard Worker
18*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpand_128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp {
19*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
20*9880d681SAndroid Build Coastguard Worker  %a2 = add <2 x i64> %a, <i64 1, i64 1>
21*9880d681SAndroid Build Coastguard Worker  %x = and <2 x i64> %a2, %b
22*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
23*9880d681SAndroid Build Coastguard Worker}
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpandn_256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp {
26*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
27*9880d681SAndroid Build Coastguard Worker  %a2 = add <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1>
28*9880d681SAndroid Build Coastguard Worker  %y = xor <4 x i64> %a2, <i64 -1, i64 -1, i64 -1, i64 -1>
29*9880d681SAndroid Build Coastguard Worker  %x = and <4 x i64> %a, %y
30*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
31*9880d681SAndroid Build Coastguard Worker}
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpandn_128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp {
34*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
35*9880d681SAndroid Build Coastguard Worker  %a2 = add <2 x i64> %a, <i64 1, i64 1>
36*9880d681SAndroid Build Coastguard Worker  %y = xor <2 x i64> %a2, <i64 -1, i64 -1>
37*9880d681SAndroid Build Coastguard Worker  %x = and <2 x i64> %a, %y
38*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpor_256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp {
42*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
43*9880d681SAndroid Build Coastguard Worker  %a2 = add <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1>
44*9880d681SAndroid Build Coastguard Worker  %x = or <4 x i64> %a2, %b
45*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @vpxor_256(<4 x i64> %a, <4 x i64> %b) nounwind uwtable readnone ssp {
49*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
50*9880d681SAndroid Build Coastguard Worker  %a2 = add <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1>
51*9880d681SAndroid Build Coastguard Worker  %x = xor <4 x i64> %a2, %b
52*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
53*9880d681SAndroid Build Coastguard Worker}
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpor_128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp {
56*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
57*9880d681SAndroid Build Coastguard Worker  %a2 = add <2 x i64> %a, <i64 1, i64 1>
58*9880d681SAndroid Build Coastguard Worker  %x = or <2 x i64> %a2, %b
59*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
60*9880d681SAndroid Build Coastguard Worker}
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @vpxor_128(<2 x i64> %a, <2 x i64> %b) nounwind uwtable readnone ssp {
63*9880d681SAndroid Build Coastguard Worker  ; Force the execution domain with an add.
64*9880d681SAndroid Build Coastguard Worker  %a2 = add <2 x i64> %a, <i64 1, i64 1>
65*9880d681SAndroid Build Coastguard Worker  %x = xor <2 x i64> %a2, %b
66*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
67*9880d681SAndroid Build Coastguard Worker}
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_vpaddq_256(<4 x i64> %i, <4 x i64> %j) nounwind readnone {
70*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i64> %i, %j
71*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
72*9880d681SAndroid Build Coastguard Worker}
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_vpaddd_256(<8 x i32> %i, <8 x i32> %j) nounwind readnone {
75*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i32> %i, %j
76*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %x
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_vpaddw_256(<16 x i16> %i, <16 x i16> %j) nounwind readnone {
80*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i16> %i, %j
81*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %x
82*9880d681SAndroid Build Coastguard Worker}
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_vpaddb_256(<32 x i8> %i, <32 x i8> %j) nounwind readnone {
85*9880d681SAndroid Build Coastguard Worker  %x = add <32 x i8> %i, %j
86*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %x
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_vpsubq_256(<4 x i64> %i, <4 x i64> %j) nounwind readnone {
90*9880d681SAndroid Build Coastguard Worker  %x = sub <4 x i64> %i, %j
91*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
92*9880d681SAndroid Build Coastguard Worker}
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_vpsubd_256(<8 x i32> %i, <8 x i32> %j) nounwind readnone {
95*9880d681SAndroid Build Coastguard Worker  %x = sub <8 x i32> %i, %j
96*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %x
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_vpsubw_256(<16 x i16> %i, <16 x i16> %j) nounwind readnone {
100*9880d681SAndroid Build Coastguard Worker  %x = sub <16 x i16> %i, %j
101*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %x
102*9880d681SAndroid Build Coastguard Worker}
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_vpsubb_256(<32 x i8> %i, <32 x i8> %j) nounwind readnone {
105*9880d681SAndroid Build Coastguard Worker  %x = sub <32 x i8> %i, %j
106*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %x
107*9880d681SAndroid Build Coastguard Worker}
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_vpmullw_256(<16 x i16> %i, <16 x i16> %j) nounwind readnone {
110*9880d681SAndroid Build Coastguard Worker  %x = mul <16 x i16> %i, %j
111*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %x
112*9880d681SAndroid Build Coastguard Worker}
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_vpcmpgtd_256(<8 x i32> %i, <8 x i32> %j) nounwind readnone {
115*9880d681SAndroid Build Coastguard Worker  %bincmp = icmp slt <8 x i32> %i, %j
116*9880d681SAndroid Build Coastguard Worker  %x = sext <8 x i1> %bincmp to <8 x i32>
117*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %x
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_vpcmpeqb_256(<32 x i8> %i, <32 x i8> %j) nounwind readnone {
121*9880d681SAndroid Build Coastguard Worker  %bincmp = icmp eq <32 x i8> %i, %j
122*9880d681SAndroid Build Coastguard Worker  %x = sext <32 x i1> %bincmp to <32 x i8>
123*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %x
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_vpcmpeqw_256(<16 x i16> %i, <16 x i16> %j) nounwind readnone {
127*9880d681SAndroid Build Coastguard Worker  %bincmp = icmp eq <16 x i16> %i, %j
128*9880d681SAndroid Build Coastguard Worker  %x = sext <16 x i1> %bincmp to <16 x i16>
129*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %x
130*9880d681SAndroid Build Coastguard Worker}
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_vpcmpgtb_256(<32 x i8> %i, <32 x i8> %j) nounwind readnone {
133*9880d681SAndroid Build Coastguard Worker  %bincmp = icmp slt <32 x i8> %i, %j
134*9880d681SAndroid Build Coastguard Worker  %x = sext <32 x i1> %bincmp to <32 x i8>
135*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %x
136*9880d681SAndroid Build Coastguard Worker}
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_vpcmpgtw_256(<16 x i16> %i, <16 x i16> %j) nounwind readnone {
139*9880d681SAndroid Build Coastguard Worker  %bincmp = icmp slt <16 x i16> %i, %j
140*9880d681SAndroid Build Coastguard Worker  %x = sext <16 x i1> %bincmp to <16 x i16>
141*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %x
142*9880d681SAndroid Build Coastguard Worker}
143*9880d681SAndroid Build Coastguard Worker
144*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_vpcmpeqd_256(<8 x i32> %i, <8 x i32> %j) nounwind readnone {
145*9880d681SAndroid Build Coastguard Worker  %bincmp = icmp eq <8 x i32> %i, %j
146*9880d681SAndroid Build Coastguard Worker  %x = sext <8 x i1> %bincmp to <8 x i32>
147*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %x
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vpaddq_128(<2 x i64> %i, <2 x i64> %j) nounwind readnone {
151*9880d681SAndroid Build Coastguard Worker  %x = add <2 x i64> %i, %j
152*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
153*9880d681SAndroid Build Coastguard Worker}
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpaddd_128(<4 x i32> %i, <4 x i32> %j) nounwind readnone {
156*9880d681SAndroid Build Coastguard Worker  %x = add <4 x i32> %i, %j
157*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %x
158*9880d681SAndroid Build Coastguard Worker}
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpaddw_128(<8 x i16> %i, <8 x i16> %j) nounwind readnone {
161*9880d681SAndroid Build Coastguard Worker  %x = add <8 x i16> %i, %j
162*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %x
163*9880d681SAndroid Build Coastguard Worker}
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpaddb_128(<16 x i8> %i, <16 x i8> %j) nounwind readnone {
166*9880d681SAndroid Build Coastguard Worker  %x = add <16 x i8> %i, %j
167*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %x
168*9880d681SAndroid Build Coastguard Worker}
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_vpsubq_128(<2 x i64> %i, <2 x i64> %j) nounwind readnone {
171*9880d681SAndroid Build Coastguard Worker  %x = sub <2 x i64> %i, %j
172*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
173*9880d681SAndroid Build Coastguard Worker}
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_vpsubd_128(<4 x i32> %i, <4 x i32> %j) nounwind readnone {
176*9880d681SAndroid Build Coastguard Worker  %x = sub <4 x i32> %i, %j
177*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %x
178*9880d681SAndroid Build Coastguard Worker}
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpsubw_128(<8 x i16> %i, <8 x i16> %j) nounwind readnone {
181*9880d681SAndroid Build Coastguard Worker  %x = sub <8 x i16> %i, %j
182*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %x
183*9880d681SAndroid Build Coastguard Worker}
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpsubb_128(<16 x i8> %i, <16 x i8> %j) nounwind readnone {
186*9880d681SAndroid Build Coastguard Worker  %x = sub <16 x i8> %i, %j
187*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %x
188*9880d681SAndroid Build Coastguard Worker}
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpmullw_128(<8 x i16> %i, <8 x i16> %j) nounwind readnone {
191*9880d681SAndroid Build Coastguard Worker  %x = mul <8 x i16> %i, %j
192*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %x
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpcmpgtw_128(<8 x i16> %i, <8 x i16> %j) nounwind readnone {
196*9880d681SAndroid Build Coastguard Worker  %bincmp = icmp slt <8 x i16> %i, %j
197*9880d681SAndroid Build Coastguard Worker  %x = sext <8 x i1> %bincmp to <8 x i16>
198*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %x
199*9880d681SAndroid Build Coastguard Worker}
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpcmpgtb_128(<16 x i8> %i, <16 x i8> %j) nounwind readnone {
202*9880d681SAndroid Build Coastguard Worker  %bincmp = icmp slt <16 x i8> %i, %j
203*9880d681SAndroid Build Coastguard Worker  %x = sext <16 x i1> %bincmp to <16 x i8>
204*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %x
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test_vpcmpeqw_128(<8 x i16> %i, <8 x i16> %j) nounwind readnone {
208*9880d681SAndroid Build Coastguard Worker  %bincmp = icmp eq <8 x i16> %i, %j
209*9880d681SAndroid Build Coastguard Worker  %x = sext <8 x i1> %bincmp to <8 x i16>
210*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %x
211*9880d681SAndroid Build Coastguard Worker}
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test_vpcmpeqb_128(<16 x i8> %i, <16 x i8> %j) nounwind readnone {
214*9880d681SAndroid Build Coastguard Worker  %bincmp = icmp eq <16 x i8> %i, %j
215*9880d681SAndroid Build Coastguard Worker  %x = sext <16 x i1> %bincmp to <16 x i8>
216*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %x
217*9880d681SAndroid Build Coastguard Worker}
218*9880d681SAndroid Build Coastguard Worker
219*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @shuffle_v8i16_vpalignr(<8 x i16> %a, <8 x i16> %b) {
220*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11>
221*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shuffle
222*9880d681SAndroid Build Coastguard Worker}
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @shuffle_v16i16_vpalignr(<16 x i16> %a, <16 x i16> %b) {
225*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 23, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 31, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>
226*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shuffle
227*9880d681SAndroid Build Coastguard Worker}
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @shuffle_v16i8_vpalignr(<16 x i8> %a, <16 x i8> %b) {
230*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 31, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>
231*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %shuffle
232*9880d681SAndroid Build Coastguard Worker}
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @shuffle_v32i8_vpalignr(<32 x i8> %a, <32 x i8> %b) {
235*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 undef, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 63, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
236*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %shuffle
237*9880d681SAndroid Build Coastguard Worker}
238*9880d681SAndroid Build Coastguard Worker
239*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shuffle_v2i64_vpalignr(<2 x i64> %a, <2 x i64> %b) {
240*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 2>
241*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shuffle
242*9880d681SAndroid Build Coastguard Worker}
243*9880d681SAndroid Build Coastguard Worker
244*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shuffle_v4i32_vpalignr(<4 x i32> %a, <4 x i32> %b) {
245*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 7, i32 0, i32 1, i32 2>
246*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shuffle
247*9880d681SAndroid Build Coastguard Worker}
248*9880d681SAndroid Build Coastguard Worker
249*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @shuffle_v8i32_vpalignr(<8 x i32> %a, <8 x i32> %b) {
250*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 11, i32 0, i32 1, i32 2, i32 15, i32 4, i32 5, i32 6>
251*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %shuffle
252*9880d681SAndroid Build Coastguard Worker}
253*9880d681SAndroid Build Coastguard Worker
254*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_5163(<4 x double> %a, <4 x double> %b) {
255*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 5, i32 1, i32 6, i32 3>
256*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
257*9880d681SAndroid Build Coastguard Worker}
258*9880d681SAndroid Build Coastguard Worker
259*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_bitcast_1z(<2 x double> %a) {
260*9880d681SAndroid Build Coastguard Worker  %shuffle64 = shufflevector <2 x double> %a, <2 x double> zeroinitializer, <2 x i32> <i32 2, i32 1>
261*9880d681SAndroid Build Coastguard Worker  %bitcast32 = bitcast <2 x double> %shuffle64 to <4 x float>
262*9880d681SAndroid Build Coastguard Worker  %shuffle32 = shufflevector <4 x float> %bitcast32, <4 x float> undef, <4 x i32> <i32 2, i32 3, i32 0, i32 1>
263*9880d681SAndroid Build Coastguard Worker  %bitcast64 = bitcast <4 x float> %shuffle32 to <2 x double>
264*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %bitcast64
265*9880d681SAndroid Build Coastguard Worker}
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @shuffle_v16i16_zz_zz_zz_zz_zz_zz_zz_16_zz_zz_zz_zz_zz_zz_zz_24(<16 x i16> %a) {
268*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <16 x i16> zeroinitializer, <16 x i16> %a, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 24>
269*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shuffle
270*9880d681SAndroid Build Coastguard Worker}
271*9880d681SAndroid Build Coastguard Worker
272*9880d681SAndroid Build Coastguard Workerdefine i64 @extract_v2i64(<2 x i64> %x, i64* %dst) {
273*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <2 x i64> %x, i32 0
274*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <2 x i64> %x, i32 1
275*9880d681SAndroid Build Coastguard Worker  store i64 %r2, i64* %dst, align 1
276*9880d681SAndroid Build Coastguard Worker  ret i64 %r1
277*9880d681SAndroid Build Coastguard Worker}
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Workerdefine i32 @extract_v4i32(<4 x i32> %x, i32* %dst) {
280*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <4 x i32> %x, i32 1
281*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <4 x i32> %x, i32 3
282*9880d681SAndroid Build Coastguard Worker  store i32 %r2, i32* %dst, align 1
283*9880d681SAndroid Build Coastguard Worker  ret i32 %r1
284*9880d681SAndroid Build Coastguard Worker}
285*9880d681SAndroid Build Coastguard Worker
286*9880d681SAndroid Build Coastguard Workerdefine i16 @extract_v8i16(<8 x i16> %x, i16* %dst) {
287*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <8 x i16> %x, i32 1
288*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <8 x i16> %x, i32 3
289*9880d681SAndroid Build Coastguard Worker  store i16 %r2, i16* %dst, align 1
290*9880d681SAndroid Build Coastguard Worker  ret i16 %r1
291*9880d681SAndroid Build Coastguard Worker}
292*9880d681SAndroid Build Coastguard Worker
293*9880d681SAndroid Build Coastguard Workerdefine i8 @extract_v16i8(<16 x i8> %x, i8* %dst) {
294*9880d681SAndroid Build Coastguard Worker  %r1 = extractelement <16 x i8> %x, i32 1
295*9880d681SAndroid Build Coastguard Worker  %r2 = extractelement <16 x i8> %x, i32 3
296*9880d681SAndroid Build Coastguard Worker  store i8 %r2, i8* %dst, align 1
297*9880d681SAndroid Build Coastguard Worker  ret i8 %r1
298*9880d681SAndroid Build Coastguard Worker}
299*9880d681SAndroid Build Coastguard Worker
300*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @insert_v2i64(<2 x i64> %x, i64 %y , i64* %ptr) {
301*9880d681SAndroid Build Coastguard Worker  %val = load i64, i64* %ptr
302*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <2 x i64> %x, i64 %val, i32 1
303*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <2 x i64> %r1, i64 %y, i32 3
304*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %r2
305*9880d681SAndroid Build Coastguard Worker}
306*9880d681SAndroid Build Coastguard Worker
307*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @insert_v4i32(<4 x i32> %x, i32 %y, i32* %ptr) {
308*9880d681SAndroid Build Coastguard Worker  %val = load i32, i32* %ptr
309*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <4 x i32> %x, i32 %val, i32 1
310*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <4 x i32> %r1, i32 %y, i32 3
311*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %r2
312*9880d681SAndroid Build Coastguard Worker}
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @insert_v8i16(<8 x i16> %x, i16 %y, i16* %ptr) {
315*9880d681SAndroid Build Coastguard Worker  %val = load i16, i16* %ptr
316*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <8 x i16> %x, i16 %val, i32 1
317*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <8 x i16> %r1, i16 %y, i32 5
318*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %r2
319*9880d681SAndroid Build Coastguard Worker}
320*9880d681SAndroid Build Coastguard Worker
321*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @insert_v16i8(<16 x i8> %x, i8 %y, i8* %ptr) {
322*9880d681SAndroid Build Coastguard Worker  %val = load i8, i8* %ptr
323*9880d681SAndroid Build Coastguard Worker  %r1 = insertelement <16 x i8> %x, i8 %val, i32 3
324*9880d681SAndroid Build Coastguard Worker  %r2 = insertelement <16 x i8> %r1, i8 %y, i32 10
325*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %r2
326*9880d681SAndroid Build Coastguard Worker}
327*9880d681SAndroid Build Coastguard Worker
328*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shuffle_v4i32_0451(<4 x i32> %a, <4 x i32> %b) {
329*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 4, i32 5, i32 1>
330*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shuffle
331*9880d681SAndroid Build Coastguard Worker}
332*9880d681SAndroid Build Coastguard Worker
333*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shuffle_v4i32_0142(<4 x i32> %a, <4 x i32> %b) {
334*9880d681SAndroid Build Coastguard Worker %shuffle = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 1, i32 4, i32 2>
335*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shuffle
336*9880d681SAndroid Build Coastguard Worker}
337*9880d681SAndroid Build Coastguard Worker
338*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @shuffle_v16i8_0101010101010101(<16 x i8> %a, <16 x i8> %b) {
339*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>
340*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %shuffle
341*9880d681SAndroid Build Coastguard Worker}
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @shuffle_v16i16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<16 x i16> %a, <16 x i16> %b) {
344*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
345*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shuffle
346*9880d681SAndroid Build Coastguard Worker}
347*9880d681SAndroid Build Coastguard Worker
348*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @shuffle_v8f32_11335577(<8 x float> %a, <8 x float> %b) {
349*9880d681SAndroid Build Coastguard Worker; vmovshdup 256 test
350*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>
351*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %shuffle
352*9880d681SAndroid Build Coastguard Worker}
353*9880d681SAndroid Build Coastguard Worker
354*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_1133(<4 x float> %a, <4 x float> %b) {
355*9880d681SAndroid Build Coastguard Worker; vmovshdup 128 test
356*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 1, i32 1, i32 3, i32 3>
357*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
358*9880d681SAndroid Build Coastguard Worker}
359*9880d681SAndroid Build Coastguard Worker
360*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @shuffle_v8f32_00224466(<8 x float> %a, <8 x float> %b) {
361*9880d681SAndroid Build Coastguard Worker; vmovsldup 256 test
362*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>
363*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %shuffle
364*9880d681SAndroid Build Coastguard Worker}
365*9880d681SAndroid Build Coastguard Worker
366*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @shuffle_v4f32_0022(<4 x float> %a, <4 x float> %b) {
367*9880d681SAndroid Build Coastguard Worker; vmovsldup 128 test
368*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x float> %a, <4 x float> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
369*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %shuffle
370*9880d681SAndroid Build Coastguard Worker}
371*9880d681SAndroid Build Coastguard Worker
372*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_mem_lo_v2f64(double* %ptr, <2 x double> %b) {
373*9880d681SAndroid Build Coastguard Worker  %a = load double, double* %ptr
374*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x double> undef, double %a, i32 0
375*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> %b, <2 x i32> <i32 0, i32 3>
376*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
377*9880d681SAndroid Build Coastguard Worker}
378*9880d681SAndroid Build Coastguard Worker
379*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @insert_mem_hi_v2f64(double* %ptr, <2 x double> %b) {
380*9880d681SAndroid Build Coastguard Worker  %a = load double, double* %ptr
381*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x double> undef, double %a, i32 0
382*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> %b, <2 x i32> <i32 2, i32 0>
383*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
384*9880d681SAndroid Build Coastguard Worker}
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Workerdefine void @store_floats(<4 x float> %x, i64* %p) {
387*9880d681SAndroid Build Coastguard Worker  %a = fadd <4 x float> %x, %x
388*9880d681SAndroid Build Coastguard Worker  %b = shufflevector <4 x float> %a, <4 x float> undef, <2 x i32> <i32 0, i32 1>
389*9880d681SAndroid Build Coastguard Worker  %c = bitcast <2 x float> %b to i64
390*9880d681SAndroid Build Coastguard Worker  store i64 %c, i64* %p
391*9880d681SAndroid Build Coastguard Worker  ret void
392*9880d681SAndroid Build Coastguard Worker}
393*9880d681SAndroid Build Coastguard Worker
394*9880d681SAndroid Build Coastguard Workerdefine void @store_double(<2 x double> %x, i64* %p) {
395*9880d681SAndroid Build Coastguard Worker  %a = fadd <2 x double> %x, %x
396*9880d681SAndroid Build Coastguard Worker  %b = extractelement <2 x double> %a, i32 0
397*9880d681SAndroid Build Coastguard Worker  %c = bitcast double %b to i64
398*9880d681SAndroid Build Coastguard Worker  store i64 %c, i64* %p
399*9880d681SAndroid Build Coastguard Worker  ret void
400*9880d681SAndroid Build Coastguard Worker}
401*9880d681SAndroid Build Coastguard Worker
402*9880d681SAndroid Build Coastguard Workerdefine void @store_h_double(<2 x double> %x, i64* %p) {
403*9880d681SAndroid Build Coastguard Worker  %a = fadd <2 x double> %x, %x
404*9880d681SAndroid Build Coastguard Worker  %b = extractelement <2 x double> %a, i32 1
405*9880d681SAndroid Build Coastguard Worker  %c = bitcast double %b to i64
406*9880d681SAndroid Build Coastguard Worker  store i64 %c, i64* %p
407*9880d681SAndroid Build Coastguard Worker  ret void
408*9880d681SAndroid Build Coastguard Worker}
409*9880d681SAndroid Build Coastguard Worker
410*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test39(double* %ptr) nounwind {
411*9880d681SAndroid Build Coastguard Worker  %a = load double, double* %ptr
412*9880d681SAndroid Build Coastguard Worker  %v = insertelement <2 x double> undef, double %a, i32 0
413*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 0, i32 0>
414*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
415*9880d681SAndroid Build Coastguard Worker  }
416*9880d681SAndroid Build Coastguard Worker
417*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test40(<2 x double>* %ptr) nounwind {
418*9880d681SAndroid Build Coastguard Worker  %v = load  <2 x double>,  <2 x double>* %ptr
419*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %v, <2 x double> undef, <2 x i32> <i32 0, i32 0>
420*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
421*9880d681SAndroid Build Coastguard Worker  }
422*9880d681SAndroid Build Coastguard Worker
423*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @shuffle_v2f64_00(<2 x double> %a, <2 x double> %b) {
424*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <2 x double> %a, <2 x double> %b, <2 x i32> <i32 0, i32 0>
425*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %shuffle
426*9880d681SAndroid Build Coastguard Worker}
427*9880d681SAndroid Build Coastguard Worker
428*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @shuffle_v4f64_0022(<4 x double> %a, <4 x double> %b) {
429*9880d681SAndroid Build Coastguard Worker  %shuffle = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 0, i32 0, i32 2, i32 2>
430*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %shuffle
431*9880d681SAndroid Build Coastguard Worker}
432*9880d681SAndroid Build Coastguard Worker
433*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @ashr_v8i32(<8 x i32> %a, <8 x i32> %b) {
434*9880d681SAndroid Build Coastguard Worker  %shift = ashr <8 x i32> %a, %b
435*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %shift
436*9880d681SAndroid Build Coastguard Worker}
437*9880d681SAndroid Build Coastguard Worker
438*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @lshr_v8i32(<8 x i32> %a, <8 x i32> %b) {
439*9880d681SAndroid Build Coastguard Worker  %shift = lshr <8 x i32> %a, %b
440*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %shift
441*9880d681SAndroid Build Coastguard Worker}
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @shl_v8i32(<8 x i32> %a, <8 x i32> %b) {
444*9880d681SAndroid Build Coastguard Worker  %shift = shl <8 x i32> %a, %b
445*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %shift
446*9880d681SAndroid Build Coastguard Worker}
447*9880d681SAndroid Build Coastguard Worker
448*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @ashr_const_v8i32(<8 x i32> %a) {
449*9880d681SAndroid Build Coastguard Worker  %shift = ashr <8 x i32> %a,  <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
450*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %shift
451*9880d681SAndroid Build Coastguard Worker}
452*9880d681SAndroid Build Coastguard Worker
453*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @lshr_const_v8i32(<8 x i32> %a) {
454*9880d681SAndroid Build Coastguard Worker  %shift = lshr <8 x i32> %a,  <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
455*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %shift
456*9880d681SAndroid Build Coastguard Worker}
457*9880d681SAndroid Build Coastguard Worker
458*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @shl_const_v8i32(<8 x i32> %a) {
459*9880d681SAndroid Build Coastguard Worker  %shift = shl <8 x i32> %a,  <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
460*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %shift
461*9880d681SAndroid Build Coastguard Worker}
462*9880d681SAndroid Build Coastguard Worker
463*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @ashr_v4i64(<4 x i64> %a, <4 x i64> %b) {
464*9880d681SAndroid Build Coastguard Worker  %shift = ashr <4 x i64> %a, %b
465*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shift
466*9880d681SAndroid Build Coastguard Worker}
467*9880d681SAndroid Build Coastguard Worker
468*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @lshr_v4i64(<4 x i64> %a, <4 x i64> %b) {
469*9880d681SAndroid Build Coastguard Worker  %shift = lshr <4 x i64> %a, %b
470*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shift
471*9880d681SAndroid Build Coastguard Worker}
472*9880d681SAndroid Build Coastguard Worker
473*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shl_v4i64(<4 x i64> %a, <4 x i64> %b) {
474*9880d681SAndroid Build Coastguard Worker  %shift = shl <4 x i64> %a, %b
475*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shift
476*9880d681SAndroid Build Coastguard Worker}
477*9880d681SAndroid Build Coastguard Worker
478*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @ashr_const_v4i64(<4 x i64> %a) {
479*9880d681SAndroid Build Coastguard Worker  %shift = ashr <4 x i64> %a,  <i64 3, i64 3, i64 3, i64 3>
480*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shift
481*9880d681SAndroid Build Coastguard Worker}
482*9880d681SAndroid Build Coastguard Worker
483*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @lshr_const_v4i64(<4 x i64> %a) {
484*9880d681SAndroid Build Coastguard Worker  %shift = lshr <4 x i64> %a,  <i64 3, i64 3, i64 3, i64 3>
485*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shift
486*9880d681SAndroid Build Coastguard Worker}
487*9880d681SAndroid Build Coastguard Worker
488*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @shl_const_v4i64(<4 x i64> %a) {
489*9880d681SAndroid Build Coastguard Worker  %shift = shl <4 x i64> %a,  <i64 3, i64 3, i64 3, i64 3>
490*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %shift
491*9880d681SAndroid Build Coastguard Worker}
492*9880d681SAndroid Build Coastguard Worker
493*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @ashr_v16i16(<16 x i16> %a, <16 x i16> %b) {
494*9880d681SAndroid Build Coastguard Worker  %shift = ashr <16 x i16> %a, %b
495*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shift
496*9880d681SAndroid Build Coastguard Worker}
497*9880d681SAndroid Build Coastguard Worker
498*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @lshr_v16i16(<16 x i16> %a, <16 x i16> %b) {
499*9880d681SAndroid Build Coastguard Worker  %shift = lshr <16 x i16> %a, %b
500*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shift
501*9880d681SAndroid Build Coastguard Worker}
502*9880d681SAndroid Build Coastguard Worker
503*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @shl_v16i16(<16 x i16> %a, <16 x i16> %b) {
504*9880d681SAndroid Build Coastguard Worker  %shift = shl <16 x i16> %a, %b
505*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shift
506*9880d681SAndroid Build Coastguard Worker}
507*9880d681SAndroid Build Coastguard Worker
508*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @ashr_const_v16i16(<16 x i16> %a) {
509*9880d681SAndroid Build Coastguard Worker  %shift = ashr <16 x i16> %a,  <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
510*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shift
511*9880d681SAndroid Build Coastguard Worker}
512*9880d681SAndroid Build Coastguard Worker
513*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @lshr_const_v16i16(<16 x i16> %a) {
514*9880d681SAndroid Build Coastguard Worker  %shift = lshr <16 x i16> %a,  <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
515*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shift
516*9880d681SAndroid Build Coastguard Worker}
517*9880d681SAndroid Build Coastguard Worker
518*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @shl_const_v16i16(<16 x i16> %a) {
519*9880d681SAndroid Build Coastguard Worker  %shift = shl <16 x i16> %a,  <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
520*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %shift
521*9880d681SAndroid Build Coastguard Worker}
522*9880d681SAndroid Build Coastguard Worker
523*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @ashr_v4i32(<4 x i32> %a, <4 x i32> %b) {
524*9880d681SAndroid Build Coastguard Worker  %shift = ashr <4 x i32> %a, %b
525*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shift
526*9880d681SAndroid Build Coastguard Worker}
527*9880d681SAndroid Build Coastguard Worker
528*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @shl_const_v4i32(<4 x i32> %a) {
529*9880d681SAndroid Build Coastguard Worker  %shift = shl <4 x i32> %a,  <i32 3, i32 3, i32 3, i32 3>
530*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %shift
531*9880d681SAndroid Build Coastguard Worker}
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @ashr_v2i64(<2 x i64> %a, <2 x i64> %b) {
534*9880d681SAndroid Build Coastguard Worker  %shift = ashr <2 x i64> %a, %b
535*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shift
536*9880d681SAndroid Build Coastguard Worker}
537*9880d681SAndroid Build Coastguard Worker
538*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @shl_const_v2i64(<2 x i64> %a) {
539*9880d681SAndroid Build Coastguard Worker  %shift = shl <2 x i64> %a,  <i64 3, i64 3>
540*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %shift
541*9880d681SAndroid Build Coastguard Worker}
542*9880d681SAndroid Build Coastguard Worker
543*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ashr_v8i16(<8 x i16> %a, <8 x i16> %b) {
544*9880d681SAndroid Build Coastguard Worker  %shift = ashr <8 x i16> %a, %b
545*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
546*9880d681SAndroid Build Coastguard Worker}
547*9880d681SAndroid Build Coastguard Worker
548*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @lshr_v8i16(<8 x i16> %a, <8 x i16> %b) {
549*9880d681SAndroid Build Coastguard Worker  %shift = lshr <8 x i16> %a, %b
550*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
551*9880d681SAndroid Build Coastguard Worker}
552*9880d681SAndroid Build Coastguard Worker
553*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @shl_v8i16(<8 x i16> %a, <8 x i16> %b) {
554*9880d681SAndroid Build Coastguard Worker  %shift = shl <8 x i16> %a, %b
555*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
556*9880d681SAndroid Build Coastguard Worker}
557*9880d681SAndroid Build Coastguard Worker
558*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @ashr_const_v8i16(<8 x i16> %a) {
559*9880d681SAndroid Build Coastguard Worker  %shift = ashr <8 x i16> %a,<i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
560*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
561*9880d681SAndroid Build Coastguard Worker}
562*9880d681SAndroid Build Coastguard Worker
563*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @lshr_const_v8i16(<8 x i16> %a) {
564*9880d681SAndroid Build Coastguard Worker  %shift = lshr <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
565*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
566*9880d681SAndroid Build Coastguard Worker}
567*9880d681SAndroid Build Coastguard Worker
568*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @shl_const_v8i16(<8 x i16> %a) {
569*9880d681SAndroid Build Coastguard Worker  %shift = shl <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
570*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %shift
571*9880d681SAndroid Build Coastguard Worker}
572*9880d681SAndroid Build Coastguard Worker
573*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @zext_16i8_to_8i16(<16 x i8> %A) nounwind uwtable readnone ssp {
574*9880d681SAndroid Build Coastguard Workerentry:
575*9880d681SAndroid Build Coastguard Worker  %B = shufflevector <16 x i8> %A, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
576*9880d681SAndroid Build Coastguard Worker  %C = zext <8 x i8> %B to <8 x i16>
577*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %C
578*9880d681SAndroid Build Coastguard Worker}
579*9880d681SAndroid Build Coastguard Worker
580*9880d681SAndroid Build Coastguard Workerdefine   <32 x i8> @_broadcast32xi8(i8 %a) {
581*9880d681SAndroid Build Coastguard Worker  %b = insertelement <32 x i8> undef, i8 %a, i32 0
582*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <32 x i8> %b, <32 x i8> undef, <32 x i32> zeroinitializer
583*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %c
584*9880d681SAndroid Build Coastguard Worker}
585*9880d681SAndroid Build Coastguard Worker
586*9880d681SAndroid Build Coastguard Workerdefine   <16 x i8> @_broadcast16xi8(i8 %a) {
587*9880d681SAndroid Build Coastguard Worker  %b = insertelement <16 x i8> undef, i8 %a, i32 0
588*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <16 x i8> %b, <16 x i8> undef, <16 x i32> zeroinitializer
589*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %c
590*9880d681SAndroid Build Coastguard Worker}
591*9880d681SAndroid Build Coastguard Worker
592*9880d681SAndroid Build Coastguard Workerdefine   <16 x i16> @_broadcast16xi16(i16 %a) {
593*9880d681SAndroid Build Coastguard Worker  %b = insertelement <16 x i16> undef, i16 %a, i32 0
594*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <16 x i16> %b, <16 x i16> undef, <16 x i32> zeroinitializer
595*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %c
596*9880d681SAndroid Build Coastguard Worker}
597*9880d681SAndroid Build Coastguard Worker
598*9880d681SAndroid Build Coastguard Workerdefine   <8 x i16> @_broadcast8xi16(i16 %a) {
599*9880d681SAndroid Build Coastguard Worker  %b = insertelement <8 x i16> undef, i16 %a, i32 0
600*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <8 x i16> %b, <8 x i16> undef, <8 x i32> zeroinitializer
601*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %c
602*9880d681SAndroid Build Coastguard Worker}
603*9880d681SAndroid Build Coastguard Worker
604*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @_broadcast8xi32(i32 %a) {
605*9880d681SAndroid Build Coastguard Worker  %b = insertelement <8 x i32> undef, i32 %a, i32 0
606*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <8 x i32> %b, <8 x i32> undef, <8 x i32> zeroinitializer
607*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %c
608*9880d681SAndroid Build Coastguard Worker}
609*9880d681SAndroid Build Coastguard Worker
610*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @_broadcast4xi32(i32 %a) {
611*9880d681SAndroid Build Coastguard Worker  %b = insertelement <4 x i32> undef, i32 %a, i32 0
612*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <4 x i32> %b, <4 x i32> undef, <4 x i32> zeroinitializer
613*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %c
614*9880d681SAndroid Build Coastguard Worker}
615*9880d681SAndroid Build Coastguard Worker
616*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @_broadcast4xi64(i64 %a) {
617*9880d681SAndroid Build Coastguard Worker  %b = insertelement <4 x i64> undef, i64 %a, i64 0
618*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <4 x i64> %b, <4 x i64> undef, <4 x i32> zeroinitializer
619*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %c
620*9880d681SAndroid Build Coastguard Worker}
621*9880d681SAndroid Build Coastguard Worker
622*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @_broadcast2xi64(i64 %a) {
623*9880d681SAndroid Build Coastguard Worker  %b = insertelement <2 x i64> undef, i64 %a, i64 0
624*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <2 x i64> %b, <2 x i64> undef, <2 x i32> zeroinitializer
625*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %c
626*9880d681SAndroid Build Coastguard Worker}
627*9880d681SAndroid Build Coastguard Worker
628*9880d681SAndroid Build Coastguard Workerdefine   <8 x float> @_broadcast8xfloat(float %a) {
629*9880d681SAndroid Build Coastguard Worker  %b = insertelement <8 x float> undef, float %a, i32 0
630*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <8 x float> %b, <8 x float> undef, <8 x i32> zeroinitializer
631*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %c
632*9880d681SAndroid Build Coastguard Worker}
633*9880d681SAndroid Build Coastguard Worker
634*9880d681SAndroid Build Coastguard Workerdefine   <4 x float> @_broadcast4xfloat(float %a) {
635*9880d681SAndroid Build Coastguard Worker  %b = insertelement <4 x float> undef, float %a, i32 0
636*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <4 x float> %b, <4 x float> undef, <4 x i32> zeroinitializer
637*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %c
638*9880d681SAndroid Build Coastguard Worker}
639*9880d681SAndroid Build Coastguard Worker
640*9880d681SAndroid Build Coastguard Workerdefine   <4 x double> @_broadcast4xdouble(double %a) {
641*9880d681SAndroid Build Coastguard Worker  %b = insertelement <4 x double> undef, double %a, i32 0
642*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <4 x double> %b, <4 x double> undef, <4 x i32> zeroinitializer
643*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %c
644*9880d681SAndroid Build Coastguard Worker}
645*9880d681SAndroid Build Coastguard Worker
646*9880d681SAndroid Build Coastguard Workerdefine   <2 x double> @_broadcast2xdouble(double %a) {
647*9880d681SAndroid Build Coastguard Worker  %b = insertelement <2 x double> undef, double %a, i32 0
648*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <2 x double> %b, <2 x double> undef, <2 x i32> zeroinitializer
649*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %c
650*9880d681SAndroid Build Coastguard Worker}
651*9880d681SAndroid Build Coastguard Worker
652*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_fmsub_ps(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
653*9880d681SAndroid Build Coastguard Worker  %x = fmul <4 x float> %a0, %a1
654*9880d681SAndroid Build Coastguard Worker  %res = fsub <4 x float> %x, %a2
655*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
656*9880d681SAndroid Build Coastguard Worker}
657*9880d681SAndroid Build Coastguard Worker
658*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_cmpgtb(<32 x i8> %A) {
659*9880d681SAndroid Build Coastguard Worker; generate the follow code
660*9880d681SAndroid Build Coastguard Worker;	 vpxor	 %ymm1, %ymm1, %ymm1
661*9880d681SAndroid Build Coastguard Worker;  vpcmpgtb %ymm0, %ymm1, %ymm0
662*9880d681SAndroid Build Coastguard Worker  %B = ashr <32 x i8> %A, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
663*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %B
664*9880d681SAndroid Build Coastguard Worker}
665*9880d681SAndroid Build Coastguard Worker
666*9880d681SAndroid Build Coastguard Workerdefine   <4 x float> @_inreg4xfloat(float %a) {
667*9880d681SAndroid Build Coastguard Worker  %b = insertelement <4 x float> undef, float %a, i32 0
668*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <4 x float> %b, <4 x float> undef, <4 x i32> zeroinitializer
669*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %c
670*9880d681SAndroid Build Coastguard Worker}
671*9880d681SAndroid Build Coastguard Worker
672*9880d681SAndroid Build Coastguard Workerdefine   <8 x float> @_inreg8xfloat(float %a) {
673*9880d681SAndroid Build Coastguard Worker  %b = insertelement <8 x float> undef, float %a, i32 0
674*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <8 x float> %b, <8 x float> undef, <8 x i32> zeroinitializer
675*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %c
676*9880d681SAndroid Build Coastguard Worker}
677*9880d681SAndroid Build Coastguard Worker
678*9880d681SAndroid Build Coastguard Workerdefine   <4 x double> @_inreg4xdouble(double %a) {
679*9880d681SAndroid Build Coastguard Worker  %b = insertelement <4 x double> undef, double %a, i32 0
680*9880d681SAndroid Build Coastguard Worker  %c = shufflevector <4 x double> %b, <4 x double> undef, <4 x i32> zeroinitializer
681*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %c
682*9880d681SAndroid Build Coastguard Worker}
683