xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx2-intrinsics-x86.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=avx2 | FileCheck %s --check-prefix=AVX2
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=avx512vl | FileCheck %s --check-prefix=AVX512VL
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_packssdw(<8 x i32> %a0, <8 x i32> %a1) {
6*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_packssdw:
7*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
8*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
9*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
10*9880d681SAndroid Build Coastguard Worker;
11*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_packssdw:
12*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
13*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
14*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
15*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.packssdw(<8 x i32> %a0, <8 x i32> %a1) ; <<16 x i16>> [#uses=1]
16*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.packssdw(<8 x i32>, <8 x i32>) nounwind readnone
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_packsswb(<16 x i16> %a0, <16 x i16> %a1) {
22*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_packsswb:
23*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
24*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
25*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
26*9880d681SAndroid Build Coastguard Worker;
27*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_packsswb:
28*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
29*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
30*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
31*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.packsswb(<16 x i16> %a0, <16 x i16> %a1) ; <<32 x i8>> [#uses=1]
32*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.packsswb(<16 x i16>, <16 x i16>) nounwind readnone
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_packuswb(<16 x i16> %a0, <16 x i16> %a1) {
38*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_packuswb:
39*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
40*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpackuswb %ymm1, %ymm0, %ymm0
41*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
42*9880d681SAndroid Build Coastguard Worker;
43*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_packuswb:
44*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
45*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpackuswb %ymm1, %ymm0, %ymm0
46*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
47*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.packuswb(<16 x i16> %a0, <16 x i16> %a1) ; <<32 x i8>> [#uses=1]
48*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.packuswb(<16 x i16>, <16 x i16>) nounwind readnone
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_padds_b(<32 x i8> %a0, <32 x i8> %a1) {
54*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_padds_b:
55*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
56*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddsb %ymm1, %ymm0, %ymm0
57*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
58*9880d681SAndroid Build Coastguard Worker;
59*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_padds_b:
60*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
61*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpaddsb %ymm1, %ymm0, %ymm0
62*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
63*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.padds.b(<32 x i8> %a0, <32 x i8> %a1) ; <<32 x i8>> [#uses=1]
64*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.padds.b(<32 x i8>, <32 x i8>) nounwind readnone
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_padds_w(<16 x i16> %a0, <16 x i16> %a1) {
70*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_padds_w:
71*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
72*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddsw %ymm1, %ymm0, %ymm0
73*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
74*9880d681SAndroid Build Coastguard Worker;
75*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_padds_w:
76*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
77*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpaddsw %ymm1, %ymm0, %ymm0
78*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
79*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.padds.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
80*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.padds.w(<16 x i16>, <16 x i16>) nounwind readnone
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_paddus_b(<32 x i8> %a0, <32 x i8> %a1) {
86*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_paddus_b:
87*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
88*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddusb %ymm1, %ymm0, %ymm0
89*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
90*9880d681SAndroid Build Coastguard Worker;
91*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_paddus_b:
92*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
93*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpaddusb %ymm1, %ymm0, %ymm0
94*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
95*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.paddus.b(<32 x i8> %a0, <32 x i8> %a1) ; <<32 x i8>> [#uses=1]
96*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.paddus.b(<32 x i8>, <32 x i8>) nounwind readnone
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_paddus_w(<16 x i16> %a0, <16 x i16> %a1) {
102*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_paddus_w:
103*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
104*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddusw %ymm1, %ymm0, %ymm0
105*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
106*9880d681SAndroid Build Coastguard Worker;
107*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_paddus_w:
108*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
109*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpaddusw %ymm1, %ymm0, %ymm0
110*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
111*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.paddus.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
112*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
113*9880d681SAndroid Build Coastguard Worker}
114*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.paddus.w(<16 x i16>, <16 x i16>) nounwind readnone
115*9880d681SAndroid Build Coastguard Worker
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_pavg_b(<32 x i8> %a0, <32 x i8> %a1) {
118*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pavg_b:
119*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
120*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpavgb %ymm1, %ymm0, %ymm0
121*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
122*9880d681SAndroid Build Coastguard Worker;
123*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pavg_b:
124*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
125*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpavgb %ymm1, %ymm0, %ymm0
126*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
127*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.pavg.b(<32 x i8> %a0, <32 x i8> %a1) ; <<32 x i8>> [#uses=1]
128*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
129*9880d681SAndroid Build Coastguard Worker}
130*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.pavg.b(<32 x i8>, <32 x i8>) nounwind readnone
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_pavg_w(<16 x i16> %a0, <16 x i16> %a1) {
134*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pavg_w:
135*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
136*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpavgw %ymm1, %ymm0, %ymm0
137*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
138*9880d681SAndroid Build Coastguard Worker;
139*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pavg_w:
140*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
141*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpavgw %ymm1, %ymm0, %ymm0
142*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
143*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.pavg.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
144*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
145*9880d681SAndroid Build Coastguard Worker}
146*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.pavg.w(<16 x i16>, <16 x i16>) nounwind readnone
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_pmadd_wd(<16 x i16> %a0, <16 x i16> %a1) {
150*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmadd_wd:
151*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
152*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaddwd %ymm1, %ymm0, %ymm0
153*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
154*9880d681SAndroid Build Coastguard Worker;
155*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmadd_wd:
156*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
157*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaddwd %ymm1, %ymm0, %ymm0
158*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
159*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.pmadd.wd(<16 x i16> %a0, <16 x i16> %a1) ; <<8 x i32>> [#uses=1]
160*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
161*9880d681SAndroid Build Coastguard Worker}
162*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.pmadd.wd(<16 x i16>, <16 x i16>) nounwind readnone
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_pmaxs_w(<16 x i16> %a0, <16 x i16> %a1) {
166*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmaxs_w:
167*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
168*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
169*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
170*9880d681SAndroid Build Coastguard Worker;
171*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmaxs_w:
172*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
173*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
174*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
175*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.pmaxs.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
176*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
177*9880d681SAndroid Build Coastguard Worker}
178*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.pmaxs.w(<16 x i16>, <16 x i16>) nounwind readnone
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_pmaxu_b(<32 x i8> %a0, <32 x i8> %a1) {
182*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmaxu_b:
183*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
184*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
185*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
186*9880d681SAndroid Build Coastguard Worker;
187*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmaxu_b:
188*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
189*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
190*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
191*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.pmaxu.b(<32 x i8> %a0, <32 x i8> %a1) ; <<32 x i8>> [#uses=1]
192*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.pmaxu.b(<32 x i8>, <32 x i8>) nounwind readnone
195*9880d681SAndroid Build Coastguard Worker
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_pmins_w(<16 x i16> %a0, <16 x i16> %a1) {
198*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmins_w:
199*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
200*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
201*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
202*9880d681SAndroid Build Coastguard Worker;
203*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmins_w:
204*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
205*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
206*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
207*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.pmins.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
208*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
209*9880d681SAndroid Build Coastguard Worker}
210*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.pmins.w(<16 x i16>, <16 x i16>) nounwind readnone
211*9880d681SAndroid Build Coastguard Worker
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_pminu_b(<32 x i8> %a0, <32 x i8> %a1) {
214*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pminu_b:
215*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
216*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
217*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
218*9880d681SAndroid Build Coastguard Worker;
219*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pminu_b:
220*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
221*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpminub %ymm1, %ymm0, %ymm0
222*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
223*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.pminu.b(<32 x i8> %a0, <32 x i8> %a1) ; <<32 x i8>> [#uses=1]
224*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
225*9880d681SAndroid Build Coastguard Worker}
226*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.pminu.b(<32 x i8>, <32 x i8>) nounwind readnone
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Workerdefine i32 @test_x86_avx2_pmovmskb(<32 x i8> %a0) {
230*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmovmskb:
231*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
232*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmovmskb %ymm0, %eax
233*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
234*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
235*9880d681SAndroid Build Coastguard Worker;
236*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmovmskb:
237*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
238*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmovmskb %ymm0, %eax
239*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
240*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.avx2.pmovmskb(<32 x i8> %a0) ; <i32> [#uses=1]
241*9880d681SAndroid Build Coastguard Worker  ret i32 %res
242*9880d681SAndroid Build Coastguard Worker}
243*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.avx2.pmovmskb(<32 x i8>) nounwind readnone
244*9880d681SAndroid Build Coastguard Worker
245*9880d681SAndroid Build Coastguard Worker
246*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_pmulh_w(<16 x i16> %a0, <16 x i16> %a1) {
247*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmulh_w:
248*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
249*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmulhw %ymm1, %ymm0, %ymm0
250*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
251*9880d681SAndroid Build Coastguard Worker;
252*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmulh_w:
253*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
254*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmulhw %ymm1, %ymm0, %ymm0
255*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
256*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.pmulh.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
257*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
258*9880d681SAndroid Build Coastguard Worker}
259*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.pmulh.w(<16 x i16>, <16 x i16>) nounwind readnone
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_pmulhu_w(<16 x i16> %a0, <16 x i16> %a1) {
263*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmulhu_w:
264*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
265*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmulhuw %ymm1, %ymm0, %ymm0
266*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
267*9880d681SAndroid Build Coastguard Worker;
268*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmulhu_w:
269*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
270*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmulhuw %ymm1, %ymm0, %ymm0
271*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
272*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.pmulhu.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
273*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
274*9880d681SAndroid Build Coastguard Worker}
275*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.pmulhu.w(<16 x i16>, <16 x i16>) nounwind readnone
276*9880d681SAndroid Build Coastguard Worker
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_pmulu_dq(<8 x i32> %a0, <8 x i32> %a1) {
279*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmulu_dq:
280*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
281*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmuludq %ymm1, %ymm0, %ymm0
282*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
283*9880d681SAndroid Build Coastguard Worker;
284*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmulu_dq:
285*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
286*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmuludq %ymm1, %ymm0, %ymm0
287*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
288*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.pmulu.dq(<8 x i32> %a0, <8 x i32> %a1) ; <<4 x i64>> [#uses=1]
289*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
290*9880d681SAndroid Build Coastguard Worker}
291*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.pmulu.dq(<8 x i32>, <8 x i32>) nounwind readnone
292*9880d681SAndroid Build Coastguard Worker
293*9880d681SAndroid Build Coastguard Worker
294*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_psad_bw(<32 x i8> %a0, <32 x i8> %a1) {
295*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psad_bw:
296*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
297*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
298*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
299*9880d681SAndroid Build Coastguard Worker;
300*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psad_bw:
301*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
302*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
303*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
304*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.psad.bw(<32 x i8> %a0, <32 x i8> %a1) ; <<4 x i64>> [#uses=1]
305*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
306*9880d681SAndroid Build Coastguard Worker}
307*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.psad.bw(<32 x i8>, <32 x i8>) nounwind readnone
308*9880d681SAndroid Build Coastguard Worker
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_psll_d(<8 x i32> %a0, <4 x i32> %a1) {
311*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psll_d:
312*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
313*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpslld %xmm1, %ymm0, %ymm0
314*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
315*9880d681SAndroid Build Coastguard Worker;
316*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psll_d:
317*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
318*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpslld %xmm1, %ymm0, %ymm0
319*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
320*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.psll.d(<8 x i32> %a0, <4 x i32> %a1) ; <<8 x i32>> [#uses=1]
321*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
322*9880d681SAndroid Build Coastguard Worker}
323*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.psll.d(<8 x i32>, <4 x i32>) nounwind readnone
324*9880d681SAndroid Build Coastguard Worker
325*9880d681SAndroid Build Coastguard Worker
326*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_psll_q(<4 x i64> %a0, <2 x i64> %a1) {
327*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psll_q:
328*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
329*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq %xmm1, %ymm0, %ymm0
330*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
331*9880d681SAndroid Build Coastguard Worker;
332*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psll_q:
333*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
334*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllq %xmm1, %ymm0, %ymm0
335*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
336*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.psll.q(<4 x i64> %a0, <2 x i64> %a1) ; <<4 x i64>> [#uses=1]
337*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
338*9880d681SAndroid Build Coastguard Worker}
339*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.psll.q(<4 x i64>, <2 x i64>) nounwind readnone
340*9880d681SAndroid Build Coastguard Worker
341*9880d681SAndroid Build Coastguard Worker
342*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_psll_w(<16 x i16> %a0, <8 x i16> %a1) {
343*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psll_w:
344*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
345*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllw %xmm1, %ymm0, %ymm0
346*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
347*9880d681SAndroid Build Coastguard Worker;
348*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psll_w:
349*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
350*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllw %xmm1, %ymm0, %ymm0
351*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
352*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.psll.w(<16 x i16> %a0, <8 x i16> %a1) ; <<16 x i16>> [#uses=1]
353*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
354*9880d681SAndroid Build Coastguard Worker}
355*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.psll.w(<16 x i16>, <8 x i16>) nounwind readnone
356*9880d681SAndroid Build Coastguard Worker
357*9880d681SAndroid Build Coastguard Worker
358*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_pslli_d(<8 x i32> %a0) {
359*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pslli_d:
360*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
361*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpslld $7, %ymm0, %ymm0
362*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
363*9880d681SAndroid Build Coastguard Worker;
364*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pslli_d:
365*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
366*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpslld $7, %ymm0, %ymm0
367*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
368*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.pslli.d(<8 x i32> %a0, i32 7) ; <<8 x i32>> [#uses=1]
369*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
370*9880d681SAndroid Build Coastguard Worker}
371*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.pslli.d(<8 x i32>, i32) nounwind readnone
372*9880d681SAndroid Build Coastguard Worker
373*9880d681SAndroid Build Coastguard Worker
374*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_pslli_q(<4 x i64> %a0) {
375*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pslli_q:
376*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
377*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllq $7, %ymm0, %ymm0
378*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
379*9880d681SAndroid Build Coastguard Worker;
380*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pslli_q:
381*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
382*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllq $7, %ymm0, %ymm0
383*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
384*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.pslli.q(<4 x i64> %a0, i32 7) ; <<4 x i64>> [#uses=1]
385*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
386*9880d681SAndroid Build Coastguard Worker}
387*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.pslli.q(<4 x i64>, i32) nounwind readnone
388*9880d681SAndroid Build Coastguard Worker
389*9880d681SAndroid Build Coastguard Worker
390*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_pslli_w(<16 x i16> %a0) {
391*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pslli_w:
392*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
393*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllw $7, %ymm0, %ymm0
394*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
395*9880d681SAndroid Build Coastguard Worker;
396*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pslli_w:
397*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
398*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllw $7, %ymm0, %ymm0
399*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
400*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.pslli.w(<16 x i16> %a0, i32 7) ; <<16 x i16>> [#uses=1]
401*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
402*9880d681SAndroid Build Coastguard Worker}
403*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.pslli.w(<16 x i16>, i32) nounwind readnone
404*9880d681SAndroid Build Coastguard Worker
405*9880d681SAndroid Build Coastguard Worker
406*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_psra_d(<8 x i32> %a0, <4 x i32> %a1) {
407*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psra_d:
408*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
409*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrad %xmm1, %ymm0, %ymm0
410*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
411*9880d681SAndroid Build Coastguard Worker;
412*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psra_d:
413*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
414*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrad %xmm1, %ymm0, %ymm0
415*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
416*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.psra.d(<8 x i32> %a0, <4 x i32> %a1) ; <<8 x i32>> [#uses=1]
417*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
418*9880d681SAndroid Build Coastguard Worker}
419*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.psra.d(<8 x i32>, <4 x i32>) nounwind readnone
420*9880d681SAndroid Build Coastguard Worker
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_psra_w(<16 x i16> %a0, <8 x i16> %a1) {
423*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psra_w:
424*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
425*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsraw %xmm1, %ymm0, %ymm0
426*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
427*9880d681SAndroid Build Coastguard Worker;
428*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psra_w:
429*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
430*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsraw %xmm1, %ymm0, %ymm0
431*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
432*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.psra.w(<16 x i16> %a0, <8 x i16> %a1) ; <<16 x i16>> [#uses=1]
433*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
434*9880d681SAndroid Build Coastguard Worker}
435*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.psra.w(<16 x i16>, <8 x i16>) nounwind readnone
436*9880d681SAndroid Build Coastguard Worker
437*9880d681SAndroid Build Coastguard Worker
438*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_psrai_d(<8 x i32> %a0) {
439*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrai_d:
440*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
441*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrad $7, %ymm0, %ymm0
442*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
443*9880d681SAndroid Build Coastguard Worker;
444*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrai_d:
445*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
446*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrad $7, %ymm0, %ymm0
447*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
448*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.psrai.d(<8 x i32> %a0, i32 7) ; <<8 x i32>> [#uses=1]
449*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
450*9880d681SAndroid Build Coastguard Worker}
451*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.psrai.d(<8 x i32>, i32) nounwind readnone
452*9880d681SAndroid Build Coastguard Worker
453*9880d681SAndroid Build Coastguard Worker
454*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_psrai_w(<16 x i16> %a0) {
455*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrai_w:
456*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
457*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsraw $7, %ymm0, %ymm0
458*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
459*9880d681SAndroid Build Coastguard Worker;
460*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrai_w:
461*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
462*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsraw $7, %ymm0, %ymm0
463*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
464*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.psrai.w(<16 x i16> %a0, i32 7) ; <<16 x i16>> [#uses=1]
465*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
466*9880d681SAndroid Build Coastguard Worker}
467*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.psrai.w(<16 x i16>, i32) nounwind readnone
468*9880d681SAndroid Build Coastguard Worker
469*9880d681SAndroid Build Coastguard Worker
470*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_psrl_d(<8 x i32> %a0, <4 x i32> %a1) {
471*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrl_d:
472*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
473*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrld %xmm1, %ymm0, %ymm0
474*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
475*9880d681SAndroid Build Coastguard Worker;
476*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrl_d:
477*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
478*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrld %xmm1, %ymm0, %ymm0
479*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
480*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.psrl.d(<8 x i32> %a0, <4 x i32> %a1) ; <<8 x i32>> [#uses=1]
481*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
482*9880d681SAndroid Build Coastguard Worker}
483*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.psrl.d(<8 x i32>, <4 x i32>) nounwind readnone
484*9880d681SAndroid Build Coastguard Worker
485*9880d681SAndroid Build Coastguard Worker
486*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_psrl_q(<4 x i64> %a0, <2 x i64> %a1) {
487*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrl_q:
488*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
489*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq %xmm1, %ymm0, %ymm0
490*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
491*9880d681SAndroid Build Coastguard Worker;
492*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrl_q:
493*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
494*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlq %xmm1, %ymm0, %ymm0
495*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
496*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.psrl.q(<4 x i64> %a0, <2 x i64> %a1) ; <<4 x i64>> [#uses=1]
497*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
498*9880d681SAndroid Build Coastguard Worker}
499*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.psrl.q(<4 x i64>, <2 x i64>) nounwind readnone
500*9880d681SAndroid Build Coastguard Worker
501*9880d681SAndroid Build Coastguard Worker
502*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_psrl_w(<16 x i16> %a0, <8 x i16> %a1) {
503*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrl_w:
504*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
505*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw %xmm1, %ymm0, %ymm0
506*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
507*9880d681SAndroid Build Coastguard Worker;
508*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrl_w:
509*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
510*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlw %xmm1, %ymm0, %ymm0
511*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
512*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.psrl.w(<16 x i16> %a0, <8 x i16> %a1) ; <<16 x i16>> [#uses=1]
513*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
514*9880d681SAndroid Build Coastguard Worker}
515*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.psrl.w(<16 x i16>, <8 x i16>) nounwind readnone
516*9880d681SAndroid Build Coastguard Worker
517*9880d681SAndroid Build Coastguard Worker
518*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_psrli_d(<8 x i32> %a0) {
519*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrli_d:
520*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
521*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrld $7, %ymm0, %ymm0
522*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
523*9880d681SAndroid Build Coastguard Worker;
524*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrli_d:
525*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
526*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrld $7, %ymm0, %ymm0
527*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
528*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.psrli.d(<8 x i32> %a0, i32 7) ; <<8 x i32>> [#uses=1]
529*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
530*9880d681SAndroid Build Coastguard Worker}
531*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.psrli.d(<8 x i32>, i32) nounwind readnone
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Worker
534*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_psrli_q(<4 x i64> %a0) {
535*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrli_q:
536*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
537*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlq $7, %ymm0, %ymm0
538*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
539*9880d681SAndroid Build Coastguard Worker;
540*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrli_q:
541*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
542*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlq $7, %ymm0, %ymm0
543*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
544*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.psrli.q(<4 x i64> %a0, i32 7) ; <<4 x i64>> [#uses=1]
545*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
546*9880d681SAndroid Build Coastguard Worker}
547*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.psrli.q(<4 x i64>, i32) nounwind readnone
548*9880d681SAndroid Build Coastguard Worker
549*9880d681SAndroid Build Coastguard Worker
550*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_psrli_w(<16 x i16> %a0) {
551*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrli_w:
552*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
553*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $7, %ymm0, %ymm0
554*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
555*9880d681SAndroid Build Coastguard Worker;
556*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrli_w:
557*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
558*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlw $7, %ymm0, %ymm0
559*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
560*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.psrli.w(<16 x i16> %a0, i32 7) ; <<16 x i16>> [#uses=1]
561*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
562*9880d681SAndroid Build Coastguard Worker}
563*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.psrli.w(<16 x i16>, i32) nounwind readnone
564*9880d681SAndroid Build Coastguard Worker
565*9880d681SAndroid Build Coastguard Worker
566*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_psubs_b(<32 x i8> %a0, <32 x i8> %a1) {
567*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psubs_b:
568*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
569*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubsb %ymm1, %ymm0, %ymm0
570*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
571*9880d681SAndroid Build Coastguard Worker;
572*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psubs_b:
573*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
574*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsubsb %ymm1, %ymm0, %ymm0
575*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
576*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.psubs.b(<32 x i8> %a0, <32 x i8> %a1) ; <<32 x i8>> [#uses=1]
577*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
578*9880d681SAndroid Build Coastguard Worker}
579*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.psubs.b(<32 x i8>, <32 x i8>) nounwind readnone
580*9880d681SAndroid Build Coastguard Worker
581*9880d681SAndroid Build Coastguard Worker
582*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_psubs_w(<16 x i16> %a0, <16 x i16> %a1) {
583*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psubs_w:
584*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
585*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubsw %ymm1, %ymm0, %ymm0
586*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
587*9880d681SAndroid Build Coastguard Worker;
588*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psubs_w:
589*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
590*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsubsw %ymm1, %ymm0, %ymm0
591*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
592*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.psubs.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
593*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
594*9880d681SAndroid Build Coastguard Worker}
595*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.psubs.w(<16 x i16>, <16 x i16>) nounwind readnone
596*9880d681SAndroid Build Coastguard Worker
597*9880d681SAndroid Build Coastguard Worker
598*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_psubus_b(<32 x i8> %a0, <32 x i8> %a1) {
599*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psubus_b:
600*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
601*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubusb %ymm1, %ymm0, %ymm0
602*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
603*9880d681SAndroid Build Coastguard Worker;
604*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psubus_b:
605*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
606*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsubusb %ymm1, %ymm0, %ymm0
607*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
608*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.psubus.b(<32 x i8> %a0, <32 x i8> %a1) ; <<32 x i8>> [#uses=1]
609*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
610*9880d681SAndroid Build Coastguard Worker}
611*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.psubus.b(<32 x i8>, <32 x i8>) nounwind readnone
612*9880d681SAndroid Build Coastguard Worker
613*9880d681SAndroid Build Coastguard Worker
614*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_psubus_w(<16 x i16> %a0, <16 x i16> %a1) {
615*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psubus_w:
616*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
617*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubusw %ymm1, %ymm0, %ymm0
618*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
619*9880d681SAndroid Build Coastguard Worker;
620*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psubus_w:
621*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
622*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsubusw %ymm1, %ymm0, %ymm0
623*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
624*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.psubus.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
625*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
626*9880d681SAndroid Build Coastguard Worker}
627*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.psubus.w(<16 x i16>, <16 x i16>) nounwind readnone
628*9880d681SAndroid Build Coastguard Worker
629*9880d681SAndroid Build Coastguard Worker
630*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_pabs_b(<32 x i8> %a0) {
631*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pabs_b:
632*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
633*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpabsb %ymm0, %ymm0
634*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
635*9880d681SAndroid Build Coastguard Worker;
636*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pabs_b:
637*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
638*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpabsb %ymm0, %ymm0
639*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
640*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.pabs.b(<32 x i8> %a0) ; <<32 x i8>> [#uses=1]
641*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
642*9880d681SAndroid Build Coastguard Worker}
643*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.pabs.b(<32 x i8>) nounwind readnone
644*9880d681SAndroid Build Coastguard Worker
645*9880d681SAndroid Build Coastguard Worker
646*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_pabs_d(<8 x i32> %a0) {
647*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pabs_d:
648*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
649*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpabsd %ymm0, %ymm0
650*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
651*9880d681SAndroid Build Coastguard Worker;
652*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pabs_d:
653*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
654*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpabsd %ymm0, %ymm0
655*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
656*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.pabs.d(<8 x i32> %a0) ; <<8 x i32>> [#uses=1]
657*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
658*9880d681SAndroid Build Coastguard Worker}
659*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.pabs.d(<8 x i32>) nounwind readnone
660*9880d681SAndroid Build Coastguard Worker
661*9880d681SAndroid Build Coastguard Worker
662*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_pabs_w(<16 x i16> %a0) {
663*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pabs_w:
664*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
665*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpabsw %ymm0, %ymm0
666*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
667*9880d681SAndroid Build Coastguard Worker;
668*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pabs_w:
669*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
670*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpabsw %ymm0, %ymm0
671*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
672*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.pabs.w(<16 x i16> %a0) ; <<16 x i16>> [#uses=1]
673*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
674*9880d681SAndroid Build Coastguard Worker}
675*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.pabs.w(<16 x i16>) nounwind readnone
676*9880d681SAndroid Build Coastguard Worker
677*9880d681SAndroid Build Coastguard Worker
678*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_phadd_d(<8 x i32> %a0, <8 x i32> %a1) {
679*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_phadd_d:
680*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
681*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vphaddd %ymm1, %ymm0, %ymm0
682*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
683*9880d681SAndroid Build Coastguard Worker;
684*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_phadd_d:
685*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
686*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vphaddd %ymm1, %ymm0, %ymm0
687*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
688*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.phadd.d(<8 x i32> %a0, <8 x i32> %a1) ; <<8 x i32>> [#uses=1]
689*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
690*9880d681SAndroid Build Coastguard Worker}
691*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.phadd.d(<8 x i32>, <8 x i32>) nounwind readnone
692*9880d681SAndroid Build Coastguard Worker
693*9880d681SAndroid Build Coastguard Worker
694*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_phadd_sw(<16 x i16> %a0, <16 x i16> %a1) {
695*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_phadd_sw:
696*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
697*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vphaddsw %ymm1, %ymm0, %ymm0
698*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
699*9880d681SAndroid Build Coastguard Worker;
700*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_phadd_sw:
701*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
702*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vphaddsw %ymm1, %ymm0, %ymm0
703*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
704*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.phadd.sw(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
705*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
706*9880d681SAndroid Build Coastguard Worker}
707*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.phadd.sw(<16 x i16>, <16 x i16>) nounwind readnone
708*9880d681SAndroid Build Coastguard Worker
709*9880d681SAndroid Build Coastguard Worker
710*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_phadd_w(<16 x i16> %a0, <16 x i16> %a1) {
711*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_phadd_w:
712*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
713*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vphaddw %ymm1, %ymm0, %ymm0
714*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
715*9880d681SAndroid Build Coastguard Worker;
716*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_phadd_w:
717*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
718*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vphaddw %ymm1, %ymm0, %ymm0
719*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
720*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.phadd.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
721*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
722*9880d681SAndroid Build Coastguard Worker}
723*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.phadd.w(<16 x i16>, <16 x i16>) nounwind readnone
724*9880d681SAndroid Build Coastguard Worker
725*9880d681SAndroid Build Coastguard Worker
726*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_phsub_d(<8 x i32> %a0, <8 x i32> %a1) {
727*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_phsub_d:
728*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
729*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vphsubd %ymm1, %ymm0, %ymm0
730*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
731*9880d681SAndroid Build Coastguard Worker;
732*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_phsub_d:
733*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
734*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vphsubd %ymm1, %ymm0, %ymm0
735*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
736*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.phsub.d(<8 x i32> %a0, <8 x i32> %a1) ; <<8 x i32>> [#uses=1]
737*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
738*9880d681SAndroid Build Coastguard Worker}
739*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.phsub.d(<8 x i32>, <8 x i32>) nounwind readnone
740*9880d681SAndroid Build Coastguard Worker
741*9880d681SAndroid Build Coastguard Worker
742*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_phsub_sw(<16 x i16> %a0, <16 x i16> %a1) {
743*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_phsub_sw:
744*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
745*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vphsubsw %ymm1, %ymm0, %ymm0
746*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
747*9880d681SAndroid Build Coastguard Worker;
748*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_phsub_sw:
749*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
750*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vphsubsw %ymm1, %ymm0, %ymm0
751*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
752*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.phsub.sw(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
753*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
754*9880d681SAndroid Build Coastguard Worker}
755*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.phsub.sw(<16 x i16>, <16 x i16>) nounwind readnone
756*9880d681SAndroid Build Coastguard Worker
757*9880d681SAndroid Build Coastguard Worker
758*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_phsub_w(<16 x i16> %a0, <16 x i16> %a1) {
759*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_phsub_w:
760*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
761*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vphsubw %ymm1, %ymm0, %ymm0
762*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
763*9880d681SAndroid Build Coastguard Worker;
764*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_phsub_w:
765*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
766*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vphsubw %ymm1, %ymm0, %ymm0
767*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
768*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.phsub.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
769*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
770*9880d681SAndroid Build Coastguard Worker}
771*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.phsub.w(<16 x i16>, <16 x i16>) nounwind readnone
772*9880d681SAndroid Build Coastguard Worker
773*9880d681SAndroid Build Coastguard Worker
774*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_pmadd_ub_sw(<32 x i8> %a0, <32 x i8> %a1) {
775*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmadd_ub_sw:
776*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
777*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaddubsw %ymm1, %ymm0, %ymm0
778*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
779*9880d681SAndroid Build Coastguard Worker;
780*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmadd_ub_sw:
781*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
782*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaddubsw %ymm1, %ymm0, %ymm0
783*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
784*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.pmadd.ub.sw(<32 x i8> %a0, <32 x i8> %a1) ; <<16 x i16>> [#uses=1]
785*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
786*9880d681SAndroid Build Coastguard Worker}
787*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.pmadd.ub.sw(<32 x i8>, <32 x i8>) nounwind readnone
788*9880d681SAndroid Build Coastguard Worker
789*9880d681SAndroid Build Coastguard Worker
790*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_pmul_hr_sw(<16 x i16> %a0, <16 x i16> %a1) {
791*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmul_hr_sw:
792*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
793*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmulhrsw %ymm1, %ymm0, %ymm0
794*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
795*9880d681SAndroid Build Coastguard Worker;
796*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmul_hr_sw:
797*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
798*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmulhrsw %ymm1, %ymm0, %ymm0
799*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
800*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
801*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
802*9880d681SAndroid Build Coastguard Worker}
803*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.pmul.hr.sw(<16 x i16>, <16 x i16>) nounwind readnone
804*9880d681SAndroid Build Coastguard Worker
805*9880d681SAndroid Build Coastguard Worker
806*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_pshuf_b(<32 x i8> %a0, <32 x i8> %a1) {
807*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pshuf_b:
808*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
809*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm1, %ymm0, %ymm0
810*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
811*9880d681SAndroid Build Coastguard Worker;
812*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pshuf_b:
813*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
814*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpshufb %ymm1, %ymm0, %ymm0
815*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
816*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8> %a0, <32 x i8> %a1) ; <<16 x i8>> [#uses=1]
817*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
818*9880d681SAndroid Build Coastguard Worker}
819*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8>, <32 x i8>) nounwind readnone
820*9880d681SAndroid Build Coastguard Worker
821*9880d681SAndroid Build Coastguard Worker
822*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_psign_b(<32 x i8> %a0, <32 x i8> %a1) {
823*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psign_b:
824*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
825*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsignb %ymm1, %ymm0, %ymm0
826*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
827*9880d681SAndroid Build Coastguard Worker;
828*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psign_b:
829*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
830*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsignb %ymm1, %ymm0, %ymm0
831*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
832*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.psign.b(<32 x i8> %a0, <32 x i8> %a1) ; <<32 x i8>> [#uses=1]
833*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
834*9880d681SAndroid Build Coastguard Worker}
835*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.psign.b(<32 x i8>, <32 x i8>) nounwind readnone
836*9880d681SAndroid Build Coastguard Worker
837*9880d681SAndroid Build Coastguard Worker
838*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_psign_d(<8 x i32> %a0, <8 x i32> %a1) {
839*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psign_d:
840*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
841*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsignd %ymm1, %ymm0, %ymm0
842*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
843*9880d681SAndroid Build Coastguard Worker;
844*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psign_d:
845*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
846*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsignd %ymm1, %ymm0, %ymm0
847*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
848*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.psign.d(<8 x i32> %a0, <8 x i32> %a1) ; <<4 x i32>> [#uses=1]
849*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
850*9880d681SAndroid Build Coastguard Worker}
851*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.psign.d(<8 x i32>, <8 x i32>) nounwind readnone
852*9880d681SAndroid Build Coastguard Worker
853*9880d681SAndroid Build Coastguard Worker
854*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_psign_w(<16 x i16> %a0, <16 x i16> %a1) {
855*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psign_w:
856*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
857*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsignw %ymm1, %ymm0, %ymm0
858*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
859*9880d681SAndroid Build Coastguard Worker;
860*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psign_w:
861*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
862*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsignw %ymm1, %ymm0, %ymm0
863*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
864*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.psign.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
865*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
866*9880d681SAndroid Build Coastguard Worker}
867*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.psign.w(<16 x i16>, <16 x i16>) nounwind readnone
868*9880d681SAndroid Build Coastguard Worker
869*9880d681SAndroid Build Coastguard Worker
870*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_movntdqa(i8* %a0) {
871*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_movntdqa:
872*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
873*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
874*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovntdqa (%eax), %ymm0
875*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
876*9880d681SAndroid Build Coastguard Worker;
877*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_movntdqa:
878*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
879*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
880*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vmovntdqa (%eax), %ymm0
881*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
882*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.movntdqa(i8* %a0) ; <<4 x i64>> [#uses=1]
883*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
884*9880d681SAndroid Build Coastguard Worker}
885*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.movntdqa(i8*) nounwind readonly
886*9880d681SAndroid Build Coastguard Worker
887*9880d681SAndroid Build Coastguard Worker
888*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_mpsadbw(<32 x i8> %a0, <32 x i8> %a1) {
889*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_mpsadbw:
890*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
891*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmpsadbw $7, %ymm1, %ymm0, %ymm0
892*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
893*9880d681SAndroid Build Coastguard Worker;
894*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_mpsadbw:
895*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
896*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vmpsadbw $7, %ymm1, %ymm0, %ymm0
897*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
898*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.mpsadbw(<32 x i8> %a0, <32 x i8> %a1, i8 7) ; <<16 x i16>> [#uses=1]
899*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
900*9880d681SAndroid Build Coastguard Worker}
901*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.mpsadbw(<32 x i8>, <32 x i8>, i8) nounwind readnone
902*9880d681SAndroid Build Coastguard Worker
903*9880d681SAndroid Build Coastguard Worker
904*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_packusdw(<8 x i32> %a0, <8 x i32> %a1) {
905*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_packusdw:
906*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
907*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
908*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
909*9880d681SAndroid Build Coastguard Worker;
910*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_packusdw:
911*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
912*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
913*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
914*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.packusdw(<8 x i32> %a0, <8 x i32> %a1) ; <<16 x i16>> [#uses=1]
915*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
916*9880d681SAndroid Build Coastguard Worker}
917*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.packusdw(<8 x i32>, <8 x i32>) nounwind readnone
918*9880d681SAndroid Build Coastguard Worker
919*9880d681SAndroid Build Coastguard Worker
920*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_pblendvb(<32 x i8> %a0, <32 x i8> %a1, <32 x i8> %a2) {
921*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pblendvb:
922*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
923*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
924*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
925*9880d681SAndroid Build Coastguard Worker;
926*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pblendvb:
927*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
928*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
929*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
930*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.pblendvb(<32 x i8> %a0, <32 x i8> %a1, <32 x i8> %a2) ; <<32 x i8>> [#uses=1]
931*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
932*9880d681SAndroid Build Coastguard Worker}
933*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.pblendvb(<32 x i8>, <32 x i8>, <32 x i8>) nounwind readnone
934*9880d681SAndroid Build Coastguard Worker
935*9880d681SAndroid Build Coastguard Worker
936*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_pblendw(<16 x i16> %a0, <16 x i16> %a1) {
937*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pblendw:
938*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
939*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3,4,5,6,7],ymm1[8,9,10],ymm0[11,12,13,14,15]
940*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
941*9880d681SAndroid Build Coastguard Worker;
942*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pblendw:
943*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
944*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendw {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3,4,5,6,7],ymm1[8,9,10],ymm0[11,12,13,14,15]
945*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
946*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.pblendw(<16 x i16> %a0, <16 x i16> %a1, i8 7) ; <<16 x i16>> [#uses=1]
947*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
948*9880d681SAndroid Build Coastguard Worker}
949*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.pblendw(<16 x i16>, <16 x i16>, i8) nounwind readnone
950*9880d681SAndroid Build Coastguard Worker
951*9880d681SAndroid Build Coastguard Worker
952*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_pmaxsb(<32 x i8> %a0, <32 x i8> %a1) {
953*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmaxsb:
954*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
955*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
956*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
957*9880d681SAndroid Build Coastguard Worker;
958*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmaxsb:
959*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
960*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
961*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
962*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.pmaxs.b(<32 x i8> %a0, <32 x i8> %a1) ; <<32 x i8>> [#uses=1]
963*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
964*9880d681SAndroid Build Coastguard Worker}
965*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.pmaxs.b(<32 x i8>, <32 x i8>) nounwind readnone
966*9880d681SAndroid Build Coastguard Worker
967*9880d681SAndroid Build Coastguard Worker
968*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_pmaxsd(<8 x i32> %a0, <8 x i32> %a1) {
969*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmaxsd:
970*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
971*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
972*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
973*9880d681SAndroid Build Coastguard Worker;
974*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmaxsd:
975*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
976*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
977*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
978*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.pmaxs.d(<8 x i32> %a0, <8 x i32> %a1) ; <<8 x i32>> [#uses=1]
979*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
980*9880d681SAndroid Build Coastguard Worker}
981*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.pmaxs.d(<8 x i32>, <8 x i32>) nounwind readnone
982*9880d681SAndroid Build Coastguard Worker
983*9880d681SAndroid Build Coastguard Worker
984*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_pmaxud(<8 x i32> %a0, <8 x i32> %a1) {
985*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmaxud:
986*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
987*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
988*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
989*9880d681SAndroid Build Coastguard Worker;
990*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmaxud:
991*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
992*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
993*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
994*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.pmaxu.d(<8 x i32> %a0, <8 x i32> %a1) ; <<8 x i32>> [#uses=1]
995*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
996*9880d681SAndroid Build Coastguard Worker}
997*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.pmaxu.d(<8 x i32>, <8 x i32>) nounwind readnone
998*9880d681SAndroid Build Coastguard Worker
999*9880d681SAndroid Build Coastguard Worker
1000*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_pmaxuw(<16 x i16> %a0, <16 x i16> %a1) {
1001*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pmaxuw:
1002*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1003*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1004*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1005*9880d681SAndroid Build Coastguard Worker;
1006*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pmaxuw:
1007*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1008*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1009*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1010*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.pmaxu.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
1011*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
1012*9880d681SAndroid Build Coastguard Worker}
1013*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.pmaxu.w(<16 x i16>, <16 x i16>) nounwind readnone
1014*9880d681SAndroid Build Coastguard Worker
1015*9880d681SAndroid Build Coastguard Worker
1016*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test_x86_avx2_pminsb(<32 x i8> %a0, <32 x i8> %a1) {
1017*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pminsb:
1018*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1019*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
1020*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1021*9880d681SAndroid Build Coastguard Worker;
1022*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pminsb:
1023*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1024*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
1025*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1026*9880d681SAndroid Build Coastguard Worker  %res = call <32 x i8> @llvm.x86.avx2.pmins.b(<32 x i8> %a0, <32 x i8> %a1) ; <<32 x i8>> [#uses=1]
1027*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %res
1028*9880d681SAndroid Build Coastguard Worker}
1029*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.x86.avx2.pmins.b(<32 x i8>, <32 x i8>) nounwind readnone
1030*9880d681SAndroid Build Coastguard Worker
1031*9880d681SAndroid Build Coastguard Worker
1032*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_pminsd(<8 x i32> %a0, <8 x i32> %a1) {
1033*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pminsd:
1034*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1035*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1036*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1037*9880d681SAndroid Build Coastguard Worker;
1038*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pminsd:
1039*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1040*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1041*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1042*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.pmins.d(<8 x i32> %a0, <8 x i32> %a1) ; <<8 x i32>> [#uses=1]
1043*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
1044*9880d681SAndroid Build Coastguard Worker}
1045*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.pmins.d(<8 x i32>, <8 x i32>) nounwind readnone
1046*9880d681SAndroid Build Coastguard Worker
1047*9880d681SAndroid Build Coastguard Worker
1048*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_pminud(<8 x i32> %a0, <8 x i32> %a1) {
1049*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pminud:
1050*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1051*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1052*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1053*9880d681SAndroid Build Coastguard Worker;
1054*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pminud:
1055*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1056*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1057*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1058*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.pminu.d(<8 x i32> %a0, <8 x i32> %a1) ; <<8 x i32>> [#uses=1]
1059*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
1060*9880d681SAndroid Build Coastguard Worker}
1061*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.pminu.d(<8 x i32>, <8 x i32>) nounwind readnone
1062*9880d681SAndroid Build Coastguard Worker
1063*9880d681SAndroid Build Coastguard Worker
1064*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test_x86_avx2_pminuw(<16 x i16> %a0, <16 x i16> %a1) {
1065*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pminuw:
1066*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1067*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1068*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1069*9880d681SAndroid Build Coastguard Worker;
1070*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pminuw:
1071*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1072*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1073*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1074*9880d681SAndroid Build Coastguard Worker  %res = call <16 x i16> @llvm.x86.avx2.pminu.w(<16 x i16> %a0, <16 x i16> %a1) ; <<16 x i16>> [#uses=1]
1075*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %res
1076*9880d681SAndroid Build Coastguard Worker}
1077*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.x86.avx2.pminu.w(<16 x i16>, <16 x i16>) nounwind readnone
1078*9880d681SAndroid Build Coastguard Worker
1079*9880d681SAndroid Build Coastguard Worker
1080*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_pmul.dq(<8 x i32> %a0, <8 x i32> %a1) {
1081*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.pmul.dq(<8 x i32> %a0, <8 x i32> %a1) ; <<2 x i64>> [#uses=1]
1082*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
1083*9880d681SAndroid Build Coastguard Worker}
1084*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.pmul.dq(<8 x i32>, <8 x i32>) nounwind readnone
1085*9880d681SAndroid Build Coastguard Worker
1086*9880d681SAndroid Build Coastguard Worker
1087*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_avx2_pblendd_128(<4 x i32> %a0, <4 x i32> %a1) {
1088*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pblendd_128:
1089*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1090*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3]
1091*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1092*9880d681SAndroid Build Coastguard Worker;
1093*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pblendd_128:
1094*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1095*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm1[0,1,2],xmm0[3]
1096*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1097*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.avx2.pblendd.128(<4 x i32> %a0, <4 x i32> %a1, i8 7) ; <<4 x i32>> [#uses=1]
1098*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1099*9880d681SAndroid Build Coastguard Worker}
1100*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx2.pblendd.128(<4 x i32>, <4 x i32>, i8) nounwind readnone
1101*9880d681SAndroid Build Coastguard Worker
1102*9880d681SAndroid Build Coastguard Worker
1103*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_pblendd_256(<8 x i32> %a0, <8 x i32> %a1) {
1104*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_pblendd_256:
1105*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1106*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3,4,5,6,7]
1107*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1108*9880d681SAndroid Build Coastguard Worker;
1109*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_pblendd_256:
1110*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1111*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3,4,5,6,7]
1112*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1113*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.pblendd.256(<8 x i32> %a0, <8 x i32> %a1, i8 7) ; <<8 x i32>> [#uses=1]
1114*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
1115*9880d681SAndroid Build Coastguard Worker}
1116*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.pblendd.256(<8 x i32>, <8 x i32>, i8) nounwind readnone
1117*9880d681SAndroid Build Coastguard Worker
1118*9880d681SAndroid Build Coastguard Worker
1119*9880d681SAndroid Build Coastguard Worker; Check that the arguments are swapped between the intrinsic definition
1120*9880d681SAndroid Build Coastguard Worker; and its lowering. Indeed, the offsets are the first source in
1121*9880d681SAndroid Build Coastguard Worker; the instruction.
1122*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_permd(<8 x i32> %a0, <8 x i32> %a1) {
1123*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_permd:
1124*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1125*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1126*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1127*9880d681SAndroid Build Coastguard Worker;
1128*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_permd:
1129*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1130*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermd %ymm0, %ymm1, %ymm0
1131*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1132*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.permd(<8 x i32> %a0, <8 x i32> %a1) ; <<8 x i32>> [#uses=1]
1133*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
1134*9880d681SAndroid Build Coastguard Worker}
1135*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.permd(<8 x i32>, <8 x i32>) nounwind readonly
1136*9880d681SAndroid Build Coastguard Worker
1137*9880d681SAndroid Build Coastguard Worker
1138*9880d681SAndroid Build Coastguard Worker; Check that the arguments are swapped between the intrinsic definition
1139*9880d681SAndroid Build Coastguard Worker; and its lowering. Indeed, the offsets are the first source in
1140*9880d681SAndroid Build Coastguard Worker; the instruction.
1141*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_x86_avx2_permps(<8 x float> %a0, <8 x i32> %a1) {
1142*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_permps:
1143*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1144*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1145*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1146*9880d681SAndroid Build Coastguard Worker;
1147*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_permps:
1148*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1149*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpermps %ymm0, %ymm1, %ymm0
1150*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1151*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.avx2.permps(<8 x float> %a0, <8 x i32> %a1) ; <<8 x float>> [#uses=1]
1152*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
1153*9880d681SAndroid Build Coastguard Worker}
1154*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.x86.avx2.permps(<8 x float>, <8 x i32>) nounwind readonly
1155*9880d681SAndroid Build Coastguard Worker
1156*9880d681SAndroid Build Coastguard Worker
1157*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_vperm2i128(<4 x i64> %a0, <4 x i64> %a1) {
1158*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_vperm2i128:
1159*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1160*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]
1161*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1162*9880d681SAndroid Build Coastguard Worker;
1163*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_vperm2i128:
1164*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1165*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vperm2f128 {{.*#+}} ymm0 = ymm0[2,3,0,1]
1166*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1167*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.vperm2i128(<4 x i64> %a0, <4 x i64> %a1, i8 1) ; <<4 x i64>> [#uses=1]
1168*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
1169*9880d681SAndroid Build Coastguard Worker}
1170*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.vperm2i128(<4 x i64>, <4 x i64>, i8) nounwind readonly
1171*9880d681SAndroid Build Coastguard Worker
1172*9880d681SAndroid Build Coastguard Worker
1173*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_avx2_maskload_q(i8* %a0, <2 x i64> %a1) {
1174*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_maskload_q:
1175*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1176*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1177*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaskmovq (%eax), %xmm0, %xmm0
1178*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1179*9880d681SAndroid Build Coastguard Worker;
1180*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_maskload_q:
1181*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1182*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1183*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaskmovq (%eax), %xmm0, %xmm0
1184*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1185*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.avx2.maskload.q(i8* %a0, <2 x i64> %a1) ; <<2 x i64>> [#uses=1]
1186*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1187*9880d681SAndroid Build Coastguard Worker}
1188*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.avx2.maskload.q(i8*, <2 x i64>) nounwind readonly
1189*9880d681SAndroid Build Coastguard Worker
1190*9880d681SAndroid Build Coastguard Worker
1191*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_maskload_q_256(i8* %a0, <4 x i64> %a1) {
1192*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_maskload_q_256:
1193*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1194*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1195*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaskmovq (%eax), %ymm0, %ymm0
1196*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1197*9880d681SAndroid Build Coastguard Worker;
1198*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_maskload_q_256:
1199*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1200*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1201*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaskmovq (%eax), %ymm0, %ymm0
1202*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1203*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.maskload.q.256(i8* %a0, <4 x i64> %a1) ; <<4 x i64>> [#uses=1]
1204*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
1205*9880d681SAndroid Build Coastguard Worker}
1206*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.maskload.q.256(i8*, <4 x i64>) nounwind readonly
1207*9880d681SAndroid Build Coastguard Worker
1208*9880d681SAndroid Build Coastguard Worker
1209*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_avx2_maskload_d(i8* %a0, <4 x i32> %a1) {
1210*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_maskload_d:
1211*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1212*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1213*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaskmovd (%eax), %xmm0, %xmm0
1214*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1215*9880d681SAndroid Build Coastguard Worker;
1216*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_maskload_d:
1217*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1218*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1219*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaskmovd (%eax), %xmm0, %xmm0
1220*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1221*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.avx2.maskload.d(i8* %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
1222*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1223*9880d681SAndroid Build Coastguard Worker}
1224*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx2.maskload.d(i8*, <4 x i32>) nounwind readonly
1225*9880d681SAndroid Build Coastguard Worker
1226*9880d681SAndroid Build Coastguard Worker
1227*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_maskload_d_256(i8* %a0, <8 x i32> %a1) {
1228*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_maskload_d_256:
1229*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1230*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1231*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaskmovd (%eax), %ymm0, %ymm0
1232*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1233*9880d681SAndroid Build Coastguard Worker;
1234*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_maskload_d_256:
1235*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1236*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1237*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaskmovd (%eax), %ymm0, %ymm0
1238*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1239*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.maskload.d.256(i8* %a0, <8 x i32> %a1) ; <<8 x i32>> [#uses=1]
1240*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
1241*9880d681SAndroid Build Coastguard Worker}
1242*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.maskload.d.256(i8*, <8 x i32>) nounwind readonly
1243*9880d681SAndroid Build Coastguard Worker
1244*9880d681SAndroid Build Coastguard Worker
1245*9880d681SAndroid Build Coastguard Workerdefine void @test_x86_avx2_maskstore_q(i8* %a0, <2 x i64> %a1, <2 x i64> %a2) {
1246*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_maskstore_q:
1247*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1248*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1249*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaskmovq %xmm1, %xmm0, (%eax)
1250*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1251*9880d681SAndroid Build Coastguard Worker;
1252*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_maskstore_q:
1253*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1254*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1255*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaskmovq %xmm1, %xmm0, (%eax)
1256*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1257*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx2.maskstore.q(i8* %a0, <2 x i64> %a1, <2 x i64> %a2)
1258*9880d681SAndroid Build Coastguard Worker  ret void
1259*9880d681SAndroid Build Coastguard Worker}
1260*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx2.maskstore.q(i8*, <2 x i64>, <2 x i64>) nounwind
1261*9880d681SAndroid Build Coastguard Worker
1262*9880d681SAndroid Build Coastguard Worker
1263*9880d681SAndroid Build Coastguard Workerdefine void @test_x86_avx2_maskstore_q_256(i8* %a0, <4 x i64> %a1, <4 x i64> %a2) {
1264*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_maskstore_q_256:
1265*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1266*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1267*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaskmovq %ymm1, %ymm0, (%eax)
1268*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1269*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1270*9880d681SAndroid Build Coastguard Worker;
1271*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_maskstore_q_256:
1272*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1273*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1274*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaskmovq %ymm1, %ymm0, (%eax)
1275*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1276*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx2.maskstore.q.256(i8* %a0, <4 x i64> %a1, <4 x i64> %a2)
1277*9880d681SAndroid Build Coastguard Worker  ret void
1278*9880d681SAndroid Build Coastguard Worker}
1279*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx2.maskstore.q.256(i8*, <4 x i64>, <4 x i64>) nounwind
1280*9880d681SAndroid Build Coastguard Worker
1281*9880d681SAndroid Build Coastguard Worker
1282*9880d681SAndroid Build Coastguard Workerdefine void @test_x86_avx2_maskstore_d(i8* %a0, <4 x i32> %a1, <4 x i32> %a2) {
1283*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_maskstore_d:
1284*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1285*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1286*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaskmovd %xmm1, %xmm0, (%eax)
1287*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1288*9880d681SAndroid Build Coastguard Worker;
1289*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_maskstore_d:
1290*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1291*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1292*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaskmovd %xmm1, %xmm0, (%eax)
1293*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1294*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx2.maskstore.d(i8* %a0, <4 x i32> %a1, <4 x i32> %a2)
1295*9880d681SAndroid Build Coastguard Worker  ret void
1296*9880d681SAndroid Build Coastguard Worker}
1297*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx2.maskstore.d(i8*, <4 x i32>, <4 x i32>) nounwind
1298*9880d681SAndroid Build Coastguard Worker
1299*9880d681SAndroid Build Coastguard Worker
1300*9880d681SAndroid Build Coastguard Workerdefine void @test_x86_avx2_maskstore_d_256(i8* %a0, <8 x i32> %a1, <8 x i32> %a2) {
1301*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_maskstore_d_256:
1302*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1303*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1304*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpmaskmovd %ymm1, %ymm0, (%eax)
1305*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1306*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1307*9880d681SAndroid Build Coastguard Worker;
1308*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_maskstore_d_256:
1309*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1310*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1311*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpmaskmovd %ymm1, %ymm0, (%eax)
1312*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1313*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx2.maskstore.d.256(i8* %a0, <8 x i32> %a1, <8 x i32> %a2)
1314*9880d681SAndroid Build Coastguard Worker  ret void
1315*9880d681SAndroid Build Coastguard Worker}
1316*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx2.maskstore.d.256(i8*, <8 x i32>, <8 x i32>) nounwind
1317*9880d681SAndroid Build Coastguard Worker
1318*9880d681SAndroid Build Coastguard Worker
1319*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_avx2_psllv_d(<4 x i32> %a0, <4 x i32> %a1) {
1320*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psllv_d:
1321*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1322*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllvd %xmm1, %xmm0, %xmm0
1323*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1324*9880d681SAndroid Build Coastguard Worker;
1325*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psllv_d:
1326*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1327*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllvd %xmm1, %xmm0, %xmm0
1328*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1329*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.avx2.psllv.d(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
1330*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1331*9880d681SAndroid Build Coastguard Worker}
1332*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx2.psllv.d(<4 x i32>, <4 x i32>) nounwind readnone
1333*9880d681SAndroid Build Coastguard Worker
1334*9880d681SAndroid Build Coastguard Worker
1335*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_psllv_d_256(<8 x i32> %a0, <8 x i32> %a1) {
1336*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psllv_d_256:
1337*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1338*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0
1339*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1340*9880d681SAndroid Build Coastguard Worker;
1341*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psllv_d_256:
1342*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1343*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllvd %ymm1, %ymm0, %ymm0
1344*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1345*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.psllv.d.256(<8 x i32> %a0, <8 x i32> %a1) ; <<8 x i32>> [#uses=1]
1346*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
1347*9880d681SAndroid Build Coastguard Worker}
1348*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.psllv.d.256(<8 x i32>, <8 x i32>) nounwind readnone
1349*9880d681SAndroid Build Coastguard Worker
1350*9880d681SAndroid Build Coastguard Worker
1351*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_avx2_psllv_q(<2 x i64> %a0, <2 x i64> %a1) {
1352*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psllv_q:
1353*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1354*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllvq %xmm1, %xmm0, %xmm0
1355*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1356*9880d681SAndroid Build Coastguard Worker;
1357*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psllv_q:
1358*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1359*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllvq %xmm1, %xmm0, %xmm0
1360*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1361*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.avx2.psllv.q(<2 x i64> %a0, <2 x i64> %a1) ; <<2 x i64>> [#uses=1]
1362*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1363*9880d681SAndroid Build Coastguard Worker}
1364*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.avx2.psllv.q(<2 x i64>, <2 x i64>) nounwind readnone
1365*9880d681SAndroid Build Coastguard Worker
1366*9880d681SAndroid Build Coastguard Worker
1367*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_psllv_q_256(<4 x i64> %a0, <4 x i64> %a1) {
1368*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psllv_q_256:
1369*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1370*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllvq %ymm1, %ymm0, %ymm0
1371*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1372*9880d681SAndroid Build Coastguard Worker;
1373*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psllv_q_256:
1374*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1375*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsllvq %ymm1, %ymm0, %ymm0
1376*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1377*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.psllv.q.256(<4 x i64> %a0, <4 x i64> %a1) ; <<4 x i64>> [#uses=1]
1378*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
1379*9880d681SAndroid Build Coastguard Worker}
1380*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.psllv.q.256(<4 x i64>, <4 x i64>) nounwind readnone
1381*9880d681SAndroid Build Coastguard Worker
1382*9880d681SAndroid Build Coastguard Worker
1383*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_avx2_psrlv_d(<4 x i32> %a0, <4 x i32> %a1) {
1384*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrlv_d:
1385*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1386*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvd %xmm1, %xmm0, %xmm0
1387*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1388*9880d681SAndroid Build Coastguard Worker;
1389*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrlv_d:
1390*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1391*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlvd %xmm1, %xmm0, %xmm0
1392*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1393*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.avx2.psrlv.d(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
1394*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1395*9880d681SAndroid Build Coastguard Worker}
1396*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx2.psrlv.d(<4 x i32>, <4 x i32>) nounwind readnone
1397*9880d681SAndroid Build Coastguard Worker
1398*9880d681SAndroid Build Coastguard Worker
1399*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_psrlv_d_256(<8 x i32> %a0, <8 x i32> %a1) {
1400*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrlv_d_256:
1401*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1402*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm0
1403*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1404*9880d681SAndroid Build Coastguard Worker;
1405*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrlv_d_256:
1406*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1407*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlvd %ymm1, %ymm0, %ymm0
1408*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1409*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.psrlv.d.256(<8 x i32> %a0, <8 x i32> %a1) ; <<8 x i32>> [#uses=1]
1410*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
1411*9880d681SAndroid Build Coastguard Worker}
1412*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.psrlv.d.256(<8 x i32>, <8 x i32>) nounwind readnone
1413*9880d681SAndroid Build Coastguard Worker
1414*9880d681SAndroid Build Coastguard Worker
1415*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_avx2_psrlv_q(<2 x i64> %a0, <2 x i64> %a1) {
1416*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrlv_q:
1417*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1418*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvq %xmm1, %xmm0, %xmm0
1419*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1420*9880d681SAndroid Build Coastguard Worker;
1421*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrlv_q:
1422*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1423*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlvq %xmm1, %xmm0, %xmm0
1424*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1425*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.avx2.psrlv.q(<2 x i64> %a0, <2 x i64> %a1) ; <<2 x i64>> [#uses=1]
1426*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1427*9880d681SAndroid Build Coastguard Worker}
1428*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.avx2.psrlv.q(<2 x i64>, <2 x i64>) nounwind readnone
1429*9880d681SAndroid Build Coastguard Worker
1430*9880d681SAndroid Build Coastguard Worker
1431*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_psrlv_q_256(<4 x i64> %a0, <4 x i64> %a1) {
1432*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrlv_q_256:
1433*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1434*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlvq %ymm1, %ymm0, %ymm0
1435*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1436*9880d681SAndroid Build Coastguard Worker;
1437*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrlv_q_256:
1438*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1439*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsrlvq %ymm1, %ymm0, %ymm0
1440*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1441*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.psrlv.q.256(<4 x i64> %a0, <4 x i64> %a1) ; <<4 x i64>> [#uses=1]
1442*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
1443*9880d681SAndroid Build Coastguard Worker}
1444*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.psrlv.q.256(<4 x i64>, <4 x i64>) nounwind readnone
1445*9880d681SAndroid Build Coastguard Worker
1446*9880d681SAndroid Build Coastguard Worker
1447*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_avx2_psrav_d(<4 x i32> %a0, <4 x i32> %a1) {
1448*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrav_d:
1449*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1450*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsravd %xmm1, %xmm0, %xmm0
1451*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1452*9880d681SAndroid Build Coastguard Worker;
1453*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrav_d:
1454*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1455*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsravd %xmm1, %xmm0, %xmm0
1456*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1457*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.avx2.psrav.d(<4 x i32> %a0, <4 x i32> %a1) ; <<4 x i32>> [#uses=1]
1458*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1459*9880d681SAndroid Build Coastguard Worker}
1460*9880d681SAndroid Build Coastguard Worker
1461*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_avx2_psrav_d_const(<4 x i32> %a0, <4 x i32> %a1) {
1462*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrav_d_const:
1463*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1464*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} xmm0 = [2,9,4294967284,23]
1465*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsravd LCPI90_1, %xmm0, %xmm0
1466*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1467*9880d681SAndroid Build Coastguard Worker;
1468*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrav_d_const:
1469*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1470*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vmovdqa32 {{.*#+}} xmm0 = [2,9,4294967284,23]
1471*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsravd LCPI90_1, %xmm0, %xmm0
1472*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1473*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.avx2.psrav.d(<4 x i32> <i32 2, i32 9, i32 -12, i32 23>, <4 x i32> <i32 1, i32 18, i32 35, i32 52>)
1474*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1475*9880d681SAndroid Build Coastguard Worker}
1476*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx2.psrav.d(<4 x i32>, <4 x i32>) nounwind readnone
1477*9880d681SAndroid Build Coastguard Worker
1478*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_psrav_d_256(<8 x i32> %a0, <8 x i32> %a1) {
1479*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrav_d_256:
1480*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1481*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsravd %ymm1, %ymm0, %ymm0
1482*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1483*9880d681SAndroid Build Coastguard Worker;
1484*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrav_d_256:
1485*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1486*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsravd %ymm1, %ymm0, %ymm0
1487*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1488*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.psrav.d.256(<8 x i32> %a0, <8 x i32> %a1) ; <<8 x i32>> [#uses=1]
1489*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
1490*9880d681SAndroid Build Coastguard Worker}
1491*9880d681SAndroid Build Coastguard Worker
1492*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_psrav_d_256_const(<8 x i32> %a0, <8 x i32> %a1) {
1493*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_psrav_d_256_const:
1494*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1495*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm0 = [2,9,4294967284,23,4294967270,37,4294967256,51]
1496*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsravd LCPI92_1, %ymm0, %ymm0
1497*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1498*9880d681SAndroid Build Coastguard Worker;
1499*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_psrav_d_256_const:
1500*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1501*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vmovdqa32 {{.*#+}} ymm0 = [2,9,4294967284,23,4294967270,37,4294967256,51]
1502*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpsravd LCPI92_1, %ymm0, %ymm0
1503*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1504*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.psrav.d.256(<8 x i32> <i32 2, i32 9, i32 -12, i32 23, i32 -26, i32 37, i32 -40, i32 51>, <8 x i32> <i32 1, i32 18, i32 35, i32 52, i32 69, i32 15, i32 32, i32 49>)
1505*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
1506*9880d681SAndroid Build Coastguard Worker}
1507*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.psrav.d.256(<8 x i32>, <8 x i32>) nounwind readnone
1508*9880d681SAndroid Build Coastguard Worker
1509*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_avx2_gather_d_pd(<2 x double> %a0, i8* %a1, <4 x i32> %idx, <2 x double> %mask) {
1510*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_d_pd:
1511*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1512*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1513*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vgatherdpd %xmm2, (%eax,%xmm1,2), %xmm0
1514*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1515*9880d681SAndroid Build Coastguard Worker;
1516*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_d_pd:
1517*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1518*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1519*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vgatherdpd %xmm2, (%eax,%xmm1,2), %xmm0
1520*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1521*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.avx2.gather.d.pd(<2 x double> %a0,
1522*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <4 x i32> %idx, <2 x double> %mask, i8 2) ;
1523*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
1524*9880d681SAndroid Build Coastguard Worker}
1525*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.avx2.gather.d.pd(<2 x double>, i8*,
1526*9880d681SAndroid Build Coastguard Worker                      <4 x i32>, <2 x double>, i8) nounwind readonly
1527*9880d681SAndroid Build Coastguard Worker
1528*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_x86_avx2_gather_d_pd_256(<4 x double> %a0, i8* %a1, <4 x i32> %idx, <4 x double> %mask) {
1529*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_d_pd_256:
1530*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1531*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1532*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vgatherdpd %ymm2, (%eax,%xmm1,2), %ymm0
1533*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1534*9880d681SAndroid Build Coastguard Worker;
1535*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_d_pd_256:
1536*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1537*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1538*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vgatherdpd %ymm2, (%eax,%xmm1,2), %ymm0
1539*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1540*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.avx2.gather.d.pd.256(<4 x double> %a0,
1541*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <4 x i32> %idx, <4 x double> %mask, i8 2) ;
1542*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
1543*9880d681SAndroid Build Coastguard Worker}
1544*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.x86.avx2.gather.d.pd.256(<4 x double>, i8*,
1545*9880d681SAndroid Build Coastguard Worker                      <4 x i32>, <4 x double>, i8) nounwind readonly
1546*9880d681SAndroid Build Coastguard Worker
1547*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_x86_avx2_gather_q_pd(<2 x double> %a0, i8* %a1, <2 x i64> %idx, <2 x double> %mask) {
1548*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_q_pd:
1549*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1550*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1551*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vgatherqpd %xmm2, (%eax,%xmm1,2), %xmm0
1552*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1553*9880d681SAndroid Build Coastguard Worker;
1554*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_q_pd:
1555*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1556*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1557*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vgatherqpd %xmm2, (%eax,%xmm1,2), %xmm0
1558*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1559*9880d681SAndroid Build Coastguard Worker  %res = call <2 x double> @llvm.x86.avx2.gather.q.pd(<2 x double> %a0,
1560*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <2 x i64> %idx, <2 x double> %mask, i8 2) ;
1561*9880d681SAndroid Build Coastguard Worker  ret <2 x double> %res
1562*9880d681SAndroid Build Coastguard Worker}
1563*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.x86.avx2.gather.q.pd(<2 x double>, i8*,
1564*9880d681SAndroid Build Coastguard Worker                      <2 x i64>, <2 x double>, i8) nounwind readonly
1565*9880d681SAndroid Build Coastguard Worker
1566*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_x86_avx2_gather_q_pd_256(<4 x double> %a0, i8* %a1, <4 x i64> %idx, <4 x double> %mask) {
1567*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_q_pd_256:
1568*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1569*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1570*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vgatherqpd %ymm2, (%eax,%ymm1,2), %ymm0
1571*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1572*9880d681SAndroid Build Coastguard Worker;
1573*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_q_pd_256:
1574*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1575*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1576*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vgatherqpd %ymm2, (%eax,%ymm1,2), %ymm0
1577*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1578*9880d681SAndroid Build Coastguard Worker  %res = call <4 x double> @llvm.x86.avx2.gather.q.pd.256(<4 x double> %a0,
1579*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <4 x i64> %idx, <4 x double> %mask, i8 2) ;
1580*9880d681SAndroid Build Coastguard Worker  ret <4 x double> %res
1581*9880d681SAndroid Build Coastguard Worker}
1582*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.x86.avx2.gather.q.pd.256(<4 x double>, i8*,
1583*9880d681SAndroid Build Coastguard Worker                      <4 x i64>, <4 x double>, i8) nounwind readonly
1584*9880d681SAndroid Build Coastguard Worker
1585*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_avx2_gather_d_ps(<4 x float> %a0, i8* %a1, <4 x i32> %idx, <4 x float> %mask) {
1586*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_d_ps:
1587*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1588*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1589*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vgatherdps %xmm2, (%eax,%xmm1,2), %xmm0
1590*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1591*9880d681SAndroid Build Coastguard Worker;
1592*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_d_ps:
1593*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1594*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1595*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vgatherdps %xmm2, (%eax,%xmm1,2), %xmm0
1596*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1597*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.avx2.gather.d.ps(<4 x float> %a0,
1598*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <4 x i32> %idx, <4 x float> %mask, i8 2) ;
1599*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1600*9880d681SAndroid Build Coastguard Worker}
1601*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.avx2.gather.d.ps(<4 x float>, i8*,
1602*9880d681SAndroid Build Coastguard Worker                      <4 x i32>, <4 x float>, i8) nounwind readonly
1603*9880d681SAndroid Build Coastguard Worker
1604*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_x86_avx2_gather_d_ps_256(<8 x float> %a0, i8* %a1, <8 x i32> %idx, <8 x float> %mask) {
1605*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_d_ps_256:
1606*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1607*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1608*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vgatherdps %ymm2, (%eax,%ymm1,2), %ymm0
1609*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1610*9880d681SAndroid Build Coastguard Worker;
1611*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_d_ps_256:
1612*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1613*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1614*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vgatherdps %ymm2, (%eax,%ymm1,2), %ymm0
1615*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1616*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> %a0,
1617*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <8 x i32> %idx, <8 x float> %mask, i8 2) ;
1618*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
1619*9880d681SAndroid Build Coastguard Worker}
1620*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float>, i8*,
1621*9880d681SAndroid Build Coastguard Worker                      <8 x i32>, <8 x float>, i8) nounwind readonly
1622*9880d681SAndroid Build Coastguard Worker
1623*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_avx2_gather_q_ps(<4 x float> %a0, i8* %a1, <2 x i64> %idx, <4 x float> %mask) {
1624*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_q_ps:
1625*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1626*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1627*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vgatherqps %xmm2, (%eax,%xmm1,2), %xmm0
1628*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1629*9880d681SAndroid Build Coastguard Worker;
1630*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_q_ps:
1631*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1632*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1633*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vgatherqps %xmm2, (%eax,%xmm1,2), %xmm0
1634*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1635*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.avx2.gather.q.ps(<4 x float> %a0,
1636*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <2 x i64> %idx, <4 x float> %mask, i8 2) ;
1637*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1638*9880d681SAndroid Build Coastguard Worker}
1639*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.avx2.gather.q.ps(<4 x float>, i8*,
1640*9880d681SAndroid Build Coastguard Worker                      <2 x i64>, <4 x float>, i8) nounwind readonly
1641*9880d681SAndroid Build Coastguard Worker
1642*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_x86_avx2_gather_q_ps_256(<4 x float> %a0, i8* %a1, <4 x i64> %idx, <4 x float> %mask) {
1643*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_q_ps_256:
1644*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1645*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1646*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vgatherqps %xmm2, (%eax,%ymm1,2), %xmm0
1647*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1648*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1649*9880d681SAndroid Build Coastguard Worker;
1650*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_q_ps_256:
1651*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1652*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1653*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vgatherqps %xmm2, (%eax,%ymm1,2), %xmm0
1654*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1655*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.avx2.gather.q.ps.256(<4 x float> %a0,
1656*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <4 x i64> %idx, <4 x float> %mask, i8 2) ;
1657*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1658*9880d681SAndroid Build Coastguard Worker}
1659*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.avx2.gather.q.ps.256(<4 x float>, i8*,
1660*9880d681SAndroid Build Coastguard Worker                      <4 x i64>, <4 x float>, i8) nounwind readonly
1661*9880d681SAndroid Build Coastguard Worker
1662*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_avx2_gather_d_q(<2 x i64> %a0, i8* %a1, <4 x i32> %idx, <2 x i64> %mask) {
1663*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_d_q:
1664*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1665*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1666*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpgatherdq %xmm2, (%eax,%xmm1,2), %xmm0
1667*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1668*9880d681SAndroid Build Coastguard Worker;
1669*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_d_q:
1670*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1671*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1672*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpgatherdq %xmm2, (%eax,%xmm1,2), %xmm0
1673*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1674*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.avx2.gather.d.q(<2 x i64> %a0,
1675*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <4 x i32> %idx, <2 x i64> %mask, i8 2) ;
1676*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1677*9880d681SAndroid Build Coastguard Worker}
1678*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.avx2.gather.d.q(<2 x i64>, i8*,
1679*9880d681SAndroid Build Coastguard Worker                      <4 x i32>, <2 x i64>, i8) nounwind readonly
1680*9880d681SAndroid Build Coastguard Worker
1681*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_gather_d_q_256(<4 x i64> %a0, i8* %a1, <4 x i32> %idx, <4 x i64> %mask) {
1682*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_d_q_256:
1683*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1684*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1685*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpgatherdq %ymm2, (%eax,%xmm1,2), %ymm0
1686*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1687*9880d681SAndroid Build Coastguard Worker;
1688*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_d_q_256:
1689*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1690*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1691*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpgatherdq %ymm2, (%eax,%xmm1,2), %ymm0
1692*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1693*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.gather.d.q.256(<4 x i64> %a0,
1694*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <4 x i32> %idx, <4 x i64> %mask, i8 2) ;
1695*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
1696*9880d681SAndroid Build Coastguard Worker}
1697*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.gather.d.q.256(<4 x i64>, i8*,
1698*9880d681SAndroid Build Coastguard Worker                      <4 x i32>, <4 x i64>, i8) nounwind readonly
1699*9880d681SAndroid Build Coastguard Worker
1700*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_avx2_gather_q_q(<2 x i64> %a0, i8* %a1, <2 x i64> %idx, <2 x i64> %mask) {
1701*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_q_q:
1702*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1703*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1704*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpgatherqq %xmm2, (%eax,%xmm1,2), %xmm0
1705*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1706*9880d681SAndroid Build Coastguard Worker;
1707*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_q_q:
1708*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1709*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1710*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpgatherqq %xmm2, (%eax,%xmm1,2), %xmm0
1711*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1712*9880d681SAndroid Build Coastguard Worker  %res = call <2 x i64> @llvm.x86.avx2.gather.q.q(<2 x i64> %a0,
1713*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <2 x i64> %idx, <2 x i64> %mask, i8 2) ;
1714*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %res
1715*9880d681SAndroid Build Coastguard Worker}
1716*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.avx2.gather.q.q(<2 x i64>, i8*,
1717*9880d681SAndroid Build Coastguard Worker                      <2 x i64>, <2 x i64>, i8) nounwind readonly
1718*9880d681SAndroid Build Coastguard Worker
1719*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_avx2_gather_q_q_256(<4 x i64> %a0, i8* %a1, <4 x i64> %idx, <4 x i64> %mask) {
1720*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_q_q_256:
1721*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1722*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1723*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpgatherqq %ymm2, (%eax,%ymm1,2), %ymm0
1724*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1725*9880d681SAndroid Build Coastguard Worker;
1726*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_q_q_256:
1727*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1728*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1729*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpgatherqq %ymm2, (%eax,%ymm1,2), %ymm0
1730*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1731*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i64> @llvm.x86.avx2.gather.q.q.256(<4 x i64> %a0,
1732*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <4 x i64> %idx, <4 x i64> %mask, i8 2) ;
1733*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %res
1734*9880d681SAndroid Build Coastguard Worker}
1735*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx2.gather.q.q.256(<4 x i64>, i8*,
1736*9880d681SAndroid Build Coastguard Worker                      <4 x i64>, <4 x i64>, i8) nounwind readonly
1737*9880d681SAndroid Build Coastguard Worker
1738*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_avx2_gather_d_d(<4 x i32> %a0, i8* %a1, <4 x i32> %idx, <4 x i32> %mask) {
1739*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_d_d:
1740*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1741*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1742*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpgatherdd %xmm2, (%eax,%xmm1,2), %xmm0
1743*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1744*9880d681SAndroid Build Coastguard Worker;
1745*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_d_d:
1746*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1747*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1748*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpgatherdd %xmm2, (%eax,%xmm1,2), %xmm0
1749*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1750*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.avx2.gather.d.d(<4 x i32> %a0,
1751*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <4 x i32> %idx, <4 x i32> %mask, i8 2) ;
1752*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1753*9880d681SAndroid Build Coastguard Worker}
1754*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx2.gather.d.d(<4 x i32>, i8*,
1755*9880d681SAndroid Build Coastguard Worker                      <4 x i32>, <4 x i32>, i8) nounwind readonly
1756*9880d681SAndroid Build Coastguard Worker
1757*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_avx2_gather_d_d_256(<8 x i32> %a0, i8* %a1, <8 x i32> %idx, <8 x i32> %mask) {
1758*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_d_d_256:
1759*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1760*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1761*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpgatherdd %ymm2, (%eax,%ymm1,2), %ymm0
1762*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1763*9880d681SAndroid Build Coastguard Worker;
1764*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_d_d_256:
1765*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1766*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1767*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpgatherdd %ymm2, (%eax,%ymm1,2), %ymm0
1768*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1769*9880d681SAndroid Build Coastguard Worker  %res = call <8 x i32> @llvm.x86.avx2.gather.d.d.256(<8 x i32> %a0,
1770*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <8 x i32> %idx, <8 x i32> %mask, i8 2) ;
1771*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %res
1772*9880d681SAndroid Build Coastguard Worker}
1773*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx2.gather.d.d.256(<8 x i32>, i8*,
1774*9880d681SAndroid Build Coastguard Worker                      <8 x i32>, <8 x i32>, i8) nounwind readonly
1775*9880d681SAndroid Build Coastguard Worker
1776*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_avx2_gather_q_d(<4 x i32> %a0, i8* %a1, <2 x i64> %idx, <4 x i32> %mask) {
1777*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_q_d:
1778*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1779*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1780*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpgatherqd %xmm2, (%eax,%xmm1,2), %xmm0
1781*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1782*9880d681SAndroid Build Coastguard Worker;
1783*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_q_d:
1784*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1785*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1786*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpgatherqd %xmm2, (%eax,%xmm1,2), %xmm0
1787*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1788*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.avx2.gather.q.d(<4 x i32> %a0,
1789*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <2 x i64> %idx, <4 x i32> %mask, i8 2) ;
1790*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1791*9880d681SAndroid Build Coastguard Worker}
1792*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx2.gather.q.d(<4 x i32>, i8*,
1793*9880d681SAndroid Build Coastguard Worker                      <2 x i64>, <4 x i32>, i8) nounwind readonly
1794*9880d681SAndroid Build Coastguard Worker
1795*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_avx2_gather_q_d_256(<4 x i32> %a0, i8* %a1, <4 x i64> %idx, <4 x i32> %mask) {
1796*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_x86_avx2_gather_q_d_256:
1797*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1798*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1799*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpgatherqd %xmm2, (%eax,%ymm1,2), %xmm0
1800*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vzeroupper
1801*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1802*9880d681SAndroid Build Coastguard Worker;
1803*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_x86_avx2_gather_q_d_256:
1804*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1805*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1806*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vpgatherqd %xmm2, (%eax,%ymm1,2), %xmm0
1807*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1808*9880d681SAndroid Build Coastguard Worker  %res = call <4 x i32> @llvm.x86.avx2.gather.q.d.256(<4 x i32> %a0,
1809*9880d681SAndroid Build Coastguard Worker                            i8* %a1, <4 x i64> %idx, <4 x i32> %mask, i8 2) ;
1810*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %res
1811*9880d681SAndroid Build Coastguard Worker}
1812*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx2.gather.q.d.256(<4 x i32>, i8*,
1813*9880d681SAndroid Build Coastguard Worker                      <4 x i64>, <4 x i32>, i8) nounwind readonly
1814*9880d681SAndroid Build Coastguard Worker
1815*9880d681SAndroid Build Coastguard Worker; PR13298
1816*9880d681SAndroid Build Coastguard Workerdefine <8 x float>  @test_gather_mask(<8 x float> %a0, float* %a, <8 x i32> %idx, <8 x float> %mask, float* nocapture %out) {
1817*9880d681SAndroid Build Coastguard Worker;; gather with mask
1818*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test_gather_mask:
1819*9880d681SAndroid Build Coastguard Worker; AVX2:       ## BB#0:
1820*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %eax
1821*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1822*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps %ymm2, %ymm3
1823*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vgatherdps %ymm3, (%ecx,%ymm1,4), %ymm0
1824*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovups %ymm2, (%eax)
1825*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retl
1826*9880d681SAndroid Build Coastguard Worker;
1827*9880d681SAndroid Build Coastguard Worker; AVX512VL-LABEL: test_gather_mask:
1828*9880d681SAndroid Build Coastguard Worker; AVX512VL:       ## BB#0:
1829*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %eax
1830*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1831*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vmovaps %zmm2, %zmm3
1832*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vgatherdps %ymm3, (%ecx,%ymm1,4), %ymm0
1833*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    vmovups %ymm2, (%eax)
1834*9880d681SAndroid Build Coastguard Worker; AVX512VL-NEXT:    retl
1835*9880d681SAndroid Build Coastguard Worker  %a_i8 = bitcast float* %a to i8*
1836*9880d681SAndroid Build Coastguard Worker  %res = call <8 x float> @llvm.x86.avx2.gather.d.ps.256(<8 x float> %a0,
1837*9880d681SAndroid Build Coastguard Worker                           i8* %a_i8, <8 x i32> %idx, <8 x float> %mask, i8 4) ;
1838*9880d681SAndroid Build Coastguard Worker
1839*9880d681SAndroid Build Coastguard Worker;; for debugging, we'll just dump out the mask
1840*9880d681SAndroid Build Coastguard Worker  %out_ptr = bitcast float * %out to <8 x float> *
1841*9880d681SAndroid Build Coastguard Worker  store <8 x float> %mask, <8 x float> * %out_ptr, align 4
1842*9880d681SAndroid Build Coastguard Worker
1843*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %res
1844*9880d681SAndroid Build Coastguard Worker}
1845