xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/viabs.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=x86_64-unknown -mattr=+sse2    | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ssse3   | FileCheck %s --check-prefix=SSE --check-prefix=SSSE3
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx     | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx2    | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX --check-prefix=AVX512
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test1(<4 x i32> %a) nounwind {
9*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test1:
10*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
11*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
12*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm1
13*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm1, %xmm0
14*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm1, %xmm0
15*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
16*9880d681SAndroid Build Coastguard Worker;
17*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test1:
18*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
19*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm0, %xmm0
20*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
21*9880d681SAndroid Build Coastguard Worker;
22*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test1:
23*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
24*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpabsd %xmm0, %xmm0
25*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
26*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <4 x i32> zeroinitializer, %a
27*9880d681SAndroid Build Coastguard Worker  %b = icmp sgt <4 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1>
28*9880d681SAndroid Build Coastguard Worker  %abs = select <4 x i1> %b, <4 x i32> %a, <4 x i32> %tmp1neg
29*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %abs
30*9880d681SAndroid Build Coastguard Worker}
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test2(<4 x i32> %a) nounwind {
33*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test2:
34*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
35*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
36*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm1
37*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm1, %xmm0
38*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm1, %xmm0
39*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
40*9880d681SAndroid Build Coastguard Worker;
41*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test2:
42*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
43*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm0, %xmm0
44*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
45*9880d681SAndroid Build Coastguard Worker;
46*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test2:
47*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
48*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpabsd %xmm0, %xmm0
49*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
50*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <4 x i32> zeroinitializer, %a
51*9880d681SAndroid Build Coastguard Worker  %b = icmp sge <4 x i32> %a, zeroinitializer
52*9880d681SAndroid Build Coastguard Worker  %abs = select <4 x i1> %b, <4 x i32> %a, <4 x i32> %tmp1neg
53*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %abs
54*9880d681SAndroid Build Coastguard Worker}
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @test3(<8 x i16> %a) nounwind {
57*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test3:
58*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
59*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
60*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $15, %xmm1
61*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm1, %xmm0
62*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm1, %xmm0
63*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
64*9880d681SAndroid Build Coastguard Worker;
65*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test3:
66*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
67*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsw %xmm0, %xmm0
68*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
69*9880d681SAndroid Build Coastguard Worker;
70*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test3:
71*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
72*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpabsw %xmm0, %xmm0
73*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
74*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <8 x i16> zeroinitializer, %a
75*9880d681SAndroid Build Coastguard Worker  %b = icmp sgt <8 x i16> %a, zeroinitializer
76*9880d681SAndroid Build Coastguard Worker  %abs = select <8 x i1> %b, <8 x i16> %a, <8 x i16> %tmp1neg
77*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %abs
78*9880d681SAndroid Build Coastguard Worker}
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @test4(<16 x i8> %a) nounwind {
81*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test4:
82*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
83*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm1, %xmm1
84*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtb %xmm0, %xmm1
85*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm1, %xmm0
86*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm1, %xmm0
87*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
88*9880d681SAndroid Build Coastguard Worker;
89*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test4:
90*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
91*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsb %xmm0, %xmm0
92*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
93*9880d681SAndroid Build Coastguard Worker;
94*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test4:
95*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
96*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpabsb %xmm0, %xmm0
97*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
98*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <16 x i8> zeroinitializer, %a
99*9880d681SAndroid Build Coastguard Worker  %b = icmp slt <16 x i8> %a, zeroinitializer
100*9880d681SAndroid Build Coastguard Worker  %abs = select <16 x i1> %b, <16 x i8> %tmp1neg, <16 x i8> %a
101*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %abs
102*9880d681SAndroid Build Coastguard Worker}
103*9880d681SAndroid Build Coastguard Worker
104*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test5(<4 x i32> %a) nounwind {
105*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test5:
106*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
107*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm1
108*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm1
109*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm1, %xmm0
110*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm1, %xmm0
111*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
112*9880d681SAndroid Build Coastguard Worker;
113*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test5:
114*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
115*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm0, %xmm0
116*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
117*9880d681SAndroid Build Coastguard Worker;
118*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: test5:
119*9880d681SAndroid Build Coastguard Worker; AVX:       # BB#0:
120*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    vpabsd %xmm0, %xmm0
121*9880d681SAndroid Build Coastguard Worker; AVX-NEXT:    retq
122*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <4 x i32> zeroinitializer, %a
123*9880d681SAndroid Build Coastguard Worker  %b = icmp sle <4 x i32> %a, zeroinitializer
124*9880d681SAndroid Build Coastguard Worker  %abs = select <4 x i1> %b, <4 x i32> %tmp1neg, <4 x i32> %a
125*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %abs
126*9880d681SAndroid Build Coastguard Worker}
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test6(<8 x i32> %a) nounwind {
129*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test6:
130*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
131*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
132*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm2
133*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm2, %xmm0
134*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm0
135*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
136*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm2
137*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm2, %xmm1
138*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm1
139*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
140*9880d681SAndroid Build Coastguard Worker;
141*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test6:
142*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
143*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm0, %xmm0
144*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm1, %xmm1
145*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
146*9880d681SAndroid Build Coastguard Worker;
147*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test6:
148*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
149*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
150*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm2
151*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm2, %xmm1, %xmm1
152*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm3
153*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm3, %xmm0, %xmm0
154*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
155*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm1
156*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm1, %ymm0, %ymm0
157*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
158*9880d681SAndroid Build Coastguard Worker;
159*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test6:
160*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
161*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpabsd %ymm0, %ymm0
162*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
163*9880d681SAndroid Build Coastguard Worker;
164*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: test6:
165*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
166*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpabsd %ymm0, %ymm0
167*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
168*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <8 x i32> zeroinitializer, %a
169*9880d681SAndroid Build Coastguard Worker  %b = icmp sgt <8 x i32> %a, <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
170*9880d681SAndroid Build Coastguard Worker  %abs = select <8 x i1> %b, <8 x i32> %a, <8 x i32> %tmp1neg
171*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %abs
172*9880d681SAndroid Build Coastguard Worker}
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test7(<8 x i32> %a) nounwind {
175*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test7:
176*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
177*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
178*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm2
179*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm2, %xmm0
180*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm0
181*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
182*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm2
183*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm2, %xmm1
184*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm1
185*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
186*9880d681SAndroid Build Coastguard Worker;
187*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test7:
188*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
189*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm0, %xmm0
190*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm1, %xmm1
191*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
192*9880d681SAndroid Build Coastguard Worker;
193*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test7:
194*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
195*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
196*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm2
197*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm2, %xmm1, %xmm1
198*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm3
199*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm3, %xmm0, %xmm0
200*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
201*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm1
202*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm1, %ymm0, %ymm0
203*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
204*9880d681SAndroid Build Coastguard Worker;
205*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test7:
206*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
207*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpabsd %ymm0, %ymm0
208*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
209*9880d681SAndroid Build Coastguard Worker;
210*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: test7:
211*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
212*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpabsd %ymm0, %ymm0
213*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
214*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <8 x i32> zeroinitializer, %a
215*9880d681SAndroid Build Coastguard Worker  %b = icmp sge <8 x i32> %a, zeroinitializer
216*9880d681SAndroid Build Coastguard Worker  %abs = select <8 x i1> %b, <8 x i32> %a, <8 x i32> %tmp1neg
217*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %abs
218*9880d681SAndroid Build Coastguard Worker}
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @test8(<16 x i16> %a) nounwind {
221*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test8:
222*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
223*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
224*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $15, %xmm2
225*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm2, %xmm0
226*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm0
227*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
228*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psraw $15, %xmm2
229*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddw %xmm2, %xmm1
230*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm1
231*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
232*9880d681SAndroid Build Coastguard Worker;
233*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test8:
234*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
235*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsw %xmm0, %xmm0
236*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsw %xmm1, %xmm1
237*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
238*9880d681SAndroid Build Coastguard Worker;
239*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test8:
240*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
241*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
242*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $15, %xmm1, %xmm2
243*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm2, %xmm1, %xmm1
244*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsraw $15, %xmm0, %xmm3
245*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddw %xmm3, %xmm0, %xmm0
246*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
247*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm1
248*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm1, %ymm0, %ymm0
249*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
250*9880d681SAndroid Build Coastguard Worker;
251*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test8:
252*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
253*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpabsw %ymm0, %ymm0
254*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
255*9880d681SAndroid Build Coastguard Worker;
256*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: test8:
257*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
258*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpabsw %ymm0, %ymm0
259*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
260*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <16 x i16> zeroinitializer, %a
261*9880d681SAndroid Build Coastguard Worker  %b = icmp sgt <16 x i16> %a, zeroinitializer
262*9880d681SAndroid Build Coastguard Worker  %abs = select <16 x i1> %b, <16 x i16> %a, <16 x i16> %tmp1neg
263*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %abs
264*9880d681SAndroid Build Coastguard Worker}
265*9880d681SAndroid Build Coastguard Worker
266*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @test9(<32 x i8> %a) nounwind {
267*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test9:
268*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
269*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm2
270*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm3, %xmm3
271*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtb %xmm0, %xmm3
272*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm3, %xmm0
273*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm3, %xmm0
274*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
275*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddb %xmm2, %xmm1
276*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm1
277*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
278*9880d681SAndroid Build Coastguard Worker;
279*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test9:
280*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
281*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsb %xmm0, %xmm0
282*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsb %xmm1, %xmm1
283*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
284*9880d681SAndroid Build Coastguard Worker;
285*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test9:
286*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
287*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
288*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
289*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpcmpgtb %xmm1, %xmm2, %xmm3
290*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
291*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm4
292*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm3, %xmm1, %xmm1
293*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
294*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
295*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm4, %ymm0, %ymm0
296*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
297*9880d681SAndroid Build Coastguard Worker;
298*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test9:
299*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
300*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpabsb %ymm0, %ymm0
301*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
302*9880d681SAndroid Build Coastguard Worker;
303*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: test9:
304*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
305*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpabsb %ymm0, %ymm0
306*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
307*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <32 x i8> zeroinitializer, %a
308*9880d681SAndroid Build Coastguard Worker  %b = icmp slt <32 x i8> %a, zeroinitializer
309*9880d681SAndroid Build Coastguard Worker  %abs = select <32 x i1> %b, <32 x i8> %tmp1neg, <32 x i8> %a
310*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %abs
311*9880d681SAndroid Build Coastguard Worker}
312*9880d681SAndroid Build Coastguard Worker
313*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test10(<8 x i32> %a) nounwind {
314*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test10:
315*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
316*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm2
317*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm2
318*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm2, %xmm0
319*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm0
320*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm2
321*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm2
322*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm2, %xmm1
323*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm2, %xmm1
324*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
325*9880d681SAndroid Build Coastguard Worker;
326*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test10:
327*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
328*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm0, %xmm0
329*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm1, %xmm1
330*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
331*9880d681SAndroid Build Coastguard Worker;
332*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test10:
333*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
334*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
335*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm2
336*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm2, %xmm1, %xmm1
337*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm3
338*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm3, %xmm0, %xmm0
339*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
340*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm1
341*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm1, %ymm0, %ymm0
342*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
343*9880d681SAndroid Build Coastguard Worker;
344*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test10:
345*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
346*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpabsd %ymm0, %ymm0
347*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
348*9880d681SAndroid Build Coastguard Worker;
349*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: test10:
350*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
351*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpabsd %ymm0, %ymm0
352*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
353*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <8 x i32> zeroinitializer, %a
354*9880d681SAndroid Build Coastguard Worker  %b = icmp sle <8 x i32> %a, zeroinitializer
355*9880d681SAndroid Build Coastguard Worker  %abs = select <8 x i1> %b, <8 x i32> %tmp1neg, <8 x i32> %a
356*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %abs
357*9880d681SAndroid Build Coastguard Worker}
358*9880d681SAndroid Build Coastguard Worker
359*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @test11(<16 x i32> %a) nounwind {
360*9880d681SAndroid Build Coastguard Worker; SSE2-LABEL: test11:
361*9880d681SAndroid Build Coastguard Worker; SSE2:       # BB#0:
362*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm0, %xmm4
363*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm4
364*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm4, %xmm0
365*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm4, %xmm0
366*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm1, %xmm4
367*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm4
368*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm4, %xmm1
369*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm4, %xmm1
370*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm2, %xmm4
371*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm4
372*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm4, %xmm2
373*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm4, %xmm2
374*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    movdqa %xmm3, %xmm4
375*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    psrad $31, %xmm4
376*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    paddd %xmm4, %xmm3
377*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    pxor %xmm4, %xmm3
378*9880d681SAndroid Build Coastguard Worker; SSE2-NEXT:    retq
379*9880d681SAndroid Build Coastguard Worker;
380*9880d681SAndroid Build Coastguard Worker; SSSE3-LABEL: test11:
381*9880d681SAndroid Build Coastguard Worker; SSSE3:       # BB#0:
382*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm0, %xmm0
383*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm1, %xmm1
384*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm2, %xmm2
385*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    pabsd %xmm3, %xmm3
386*9880d681SAndroid Build Coastguard Worker; SSSE3-NEXT:    retq
387*9880d681SAndroid Build Coastguard Worker;
388*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test11:
389*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
390*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
391*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm3
392*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm3, %xmm2, %xmm2
393*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm4
394*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm4, %xmm0, %xmm0
395*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
396*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm2
397*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm2, %ymm0, %ymm0
398*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
399*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm3
400*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm3, %xmm2, %xmm2
401*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm4
402*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddd %xmm4, %xmm1, %xmm1
403*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
404*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm2
405*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm2, %ymm1, %ymm1
406*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
407*9880d681SAndroid Build Coastguard Worker;
408*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test11:
409*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
410*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpabsd %ymm0, %ymm0
411*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpabsd %ymm1, %ymm1
412*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
413*9880d681SAndroid Build Coastguard Worker;
414*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: test11:
415*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
416*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpabsd %zmm0, %zmm0
417*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
418*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <16 x i32> zeroinitializer, %a
419*9880d681SAndroid Build Coastguard Worker  %b = icmp sle <16 x i32> %a, zeroinitializer
420*9880d681SAndroid Build Coastguard Worker  %abs = select <16 x i1> %b, <16 x i32> %tmp1neg, <16 x i32> %a
421*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %abs
422*9880d681SAndroid Build Coastguard Worker}
423*9880d681SAndroid Build Coastguard Worker
424*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test12(<8 x i64> %a) nounwind {
425*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test12:
426*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
427*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm4
428*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $31, %xmm4
429*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
430*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm0
431*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm4, %xmm0
432*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm4
433*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $31, %xmm4
434*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
435*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm1
436*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm4, %xmm1
437*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm2, %xmm4
438*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $31, %xmm4
439*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
440*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm2
441*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm4, %xmm2
442*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm3, %xmm4
443*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $31, %xmm4
444*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
445*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm3
446*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm4, %xmm3
447*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
448*9880d681SAndroid Build Coastguard Worker;
449*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test12:
450*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
451*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
452*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm3
453*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
454*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm3, %xmm2, %xmm2
455*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm4
456*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
457*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm0, %xmm0
458*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
459*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm2
460*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm2, %ymm0, %ymm0
461*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
462*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm3
463*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
464*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm3, %xmm2, %xmm2
465*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm4
466*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
467*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm1, %xmm1
468*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
469*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm2
470*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm2, %ymm1, %ymm1
471*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
472*9880d681SAndroid Build Coastguard Worker;
473*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test12:
474*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
475*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm2
476*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[1,1,3,3,5,5,7,7]
477*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm2, %ymm0, %ymm0
478*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
479*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrad $31, %ymm1, %ymm2
480*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[1,1,3,3,5,5,7,7]
481*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm2, %ymm1, %ymm1
482*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm1
483*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
484*9880d681SAndroid Build Coastguard Worker;
485*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: test12:
486*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
487*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpabsq %zmm0, %zmm0
488*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
489*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <8 x i64> zeroinitializer, %a
490*9880d681SAndroid Build Coastguard Worker  %b = icmp sle <8 x i64> %a, zeroinitializer
491*9880d681SAndroid Build Coastguard Worker  %abs = select <8 x i1> %b, <8 x i64> %tmp1neg, <8 x i64> %a
492*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %abs
493*9880d681SAndroid Build Coastguard Worker}
494*9880d681SAndroid Build Coastguard Worker
495*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @test13(<8 x i64>* %a.ptr) nounwind {
496*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: test13:
497*9880d681SAndroid Build Coastguard Worker; SSE:       # BB#0:
498*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqu (%rdi), %xmm0
499*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqu 16(%rdi), %xmm1
500*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqu 32(%rdi), %xmm2
501*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqu 48(%rdi), %xmm3
502*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm0, %xmm4
503*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $31, %xmm4
504*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
505*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm0
506*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm4, %xmm0
507*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm1, %xmm4
508*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $31, %xmm4
509*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
510*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm1
511*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm4, %xmm1
512*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm2, %xmm4
513*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $31, %xmm4
514*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
515*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm2
516*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm4, %xmm2
517*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    movdqa %xmm3, %xmm4
518*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    psrad $31, %xmm4
519*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
520*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    paddq %xmm4, %xmm3
521*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    pxor %xmm4, %xmm3
522*9880d681SAndroid Build Coastguard Worker; SSE-NEXT:    retq
523*9880d681SAndroid Build Coastguard Worker;
524*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: test13:
525*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
526*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups (%rdi), %ymm0
527*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovups 32(%rdi), %ymm1
528*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
529*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm3
530*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
531*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm3, %xmm2, %xmm2
532*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm4
533*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
534*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm0, %xmm0
535*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
536*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm2
537*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm2, %ymm0, %ymm0
538*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
539*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm3
540*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
541*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm3, %xmm2, %xmm2
542*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm4
543*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
544*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddq %xmm4, %xmm1, %xmm1
545*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
546*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm2
547*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vxorps %ymm2, %ymm1, %ymm1
548*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
549*9880d681SAndroid Build Coastguard Worker;
550*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: test13:
551*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
552*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqu (%rdi), %ymm0
553*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqu 32(%rdi), %ymm1
554*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm2
555*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[1,1,3,3,5,5,7,7]
556*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm2, %ymm0, %ymm0
557*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
558*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrad $31, %ymm1, %ymm2
559*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufd {{.*#+}} ymm2 = ymm2[1,1,3,3,5,5,7,7]
560*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddq %ymm2, %ymm1, %ymm1
561*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm1
562*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
563*9880d681SAndroid Build Coastguard Worker;
564*9880d681SAndroid Build Coastguard Worker; AVX512-LABEL: test13:
565*9880d681SAndroid Build Coastguard Worker; AVX512:       # BB#0:
566*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    vpabsq (%rdi), %zmm0
567*9880d681SAndroid Build Coastguard Worker; AVX512-NEXT:    retq
568*9880d681SAndroid Build Coastguard Worker  %a = load <8 x i64>, <8 x i64>* %a.ptr, align 8
569*9880d681SAndroid Build Coastguard Worker  %tmp1neg = sub <8 x i64> zeroinitializer, %a
570*9880d681SAndroid Build Coastguard Worker  %b = icmp sle <8 x i64> %a, zeroinitializer
571*9880d681SAndroid Build Coastguard Worker  %abs = select <8 x i1> %b, <8 x i64> %tmp1neg, <8 x i64> %a
572*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %abs
573*9880d681SAndroid Build Coastguard Worker}
574