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