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 -fast-isel -mtriple=i386-unknown-unknown -mattr=ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=X32 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=X64 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/ssse3-builtins.c 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_abs_epi8(<2 x i64> %a0) { 8*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_abs_epi8: 9*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 10*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pabsb %xmm0, %xmm0 11*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 12*9880d681SAndroid Build Coastguard Worker; 13*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_abs_epi8: 14*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 15*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pabsb %xmm0, %xmm0 16*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 17*9880d681SAndroid Build Coastguard Worker %arg = bitcast <2 x i64> %a0 to <16 x i8> 18*9880d681SAndroid Build Coastguard Worker %call = call <16 x i8> @llvm.x86.ssse3.pabs.b.128(<16 x i8> %arg) 19*9880d681SAndroid Build Coastguard Worker %res = bitcast <16 x i8> %call to <2 x i64> 20*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.ssse3.pabs.b.128(<16 x i8>) nounwind readnone 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_abs_epi16(<2 x i64> %a0) { 25*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_abs_epi16: 26*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 27*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pabsw %xmm0, %xmm0 28*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 29*9880d681SAndroid Build Coastguard Worker; 30*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_abs_epi16: 31*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 32*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pabsw %xmm0, %xmm0 33*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 34*9880d681SAndroid Build Coastguard Worker %arg = bitcast <2 x i64> %a0 to <8 x i16> 35*9880d681SAndroid Build Coastguard Worker %call = call <8 x i16> @llvm.x86.ssse3.pabs.w.128(<8 x i16> %arg) 36*9880d681SAndroid Build Coastguard Worker %res = bitcast <8 x i16> %call to <2 x i64> 37*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.pabs.w.128(<8 x i16>) nounwind readnone 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_abs_epi32(<2 x i64> %a0) { 42*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_abs_epi32: 43*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 44*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pabsd %xmm0, %xmm0 45*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 46*9880d681SAndroid Build Coastguard Worker; 47*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_abs_epi32: 48*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 49*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pabsd %xmm0, %xmm0 50*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 51*9880d681SAndroid Build Coastguard Worker %arg = bitcast <2 x i64> %a0 to <4 x i32> 52*9880d681SAndroid Build Coastguard Worker %call = call <4 x i32> @llvm.x86.ssse3.pabs.d.128(<4 x i32> %arg) 53*9880d681SAndroid Build Coastguard Worker %res = bitcast <4 x i32> %call to <2 x i64> 54*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.ssse3.pabs.d.128(<4 x i32>) nounwind readnone 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_alignr_epi8(<2 x i64> %a0, <2 x i64> %a1) { 59*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_alignr_epi8: 60*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 61*9880d681SAndroid Build Coastguard Worker; X32-NEXT: palignr {{.*#+}} xmm1 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0,1] 62*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movdqa %xmm1, %xmm0 63*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 64*9880d681SAndroid Build Coastguard Worker; 65*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_alignr_epi8: 66*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 67*9880d681SAndroid Build Coastguard Worker; X64-NEXT: palignr {{.*#+}} xmm1 = xmm0[2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0,1] 68*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movdqa %xmm1, %xmm0 69*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 70*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <16 x i8> 71*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <16 x i8> 72*9880d681SAndroid Build Coastguard Worker %shuf = shufflevector <16 x i8> %arg0, <16 x i8> %arg1, <16 x i32> <i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17> 73*9880d681SAndroid Build Coastguard Worker %res = bitcast <16 x i8> %shuf to <2 x i64> 74*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test2_mm_alignr_epi8(<2 x i64> %a0, <2 x i64> %a1) { 78*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test2_mm_alignr_epi8: 79*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 80*9880d681SAndroid Build Coastguard Worker; X32-NEXT: palignr {{.*#+}} xmm1 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0] 81*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movdqa %xmm1, %xmm0 82*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 83*9880d681SAndroid Build Coastguard Worker; 84*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test2_mm_alignr_epi8: 85*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 86*9880d681SAndroid Build Coastguard Worker; X64-NEXT: palignr {{.*#+}} xmm1 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],xmm1[0] 87*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movdqa %xmm1, %xmm0 88*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 89*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <16 x i8> 90*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <16 x i8> 91*9880d681SAndroid Build Coastguard Worker %shuf = shufflevector <16 x i8> %arg0, <16 x i8> %arg1, <16 x i32> <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16> 92*9880d681SAndroid Build Coastguard Worker %res = bitcast <16 x i8> %shuf to <2 x i64> 93*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 94*9880d681SAndroid Build Coastguard Worker} 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hadd_epi16(<2 x i64> %a0, <2 x i64> %a1) { 97*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hadd_epi16: 98*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 99*9880d681SAndroid Build Coastguard Worker; X32-NEXT: phaddw %xmm1, %xmm0 100*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 101*9880d681SAndroid Build Coastguard Worker; 102*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hadd_epi16: 103*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 104*9880d681SAndroid Build Coastguard Worker; X64-NEXT: phaddw %xmm1, %xmm0 105*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 106*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <8 x i16> 107*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <8 x i16> 108*9880d681SAndroid Build Coastguard Worker %call = call <8 x i16> @llvm.x86.ssse3.phadd.w.128(<8 x i16> %arg0, <8 x i16> %arg1) 109*9880d681SAndroid Build Coastguard Worker %res = bitcast <8 x i16> %call to <2 x i64> 110*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 111*9880d681SAndroid Build Coastguard Worker} 112*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.phadd.w.128(<8 x i16>, <8 x i16>) nounwind readnone 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hadd_epi32(<2 x i64> %a0, <2 x i64> %a1) { 115*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hadd_epi32: 116*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 117*9880d681SAndroid Build Coastguard Worker; X32-NEXT: phaddd %xmm1, %xmm0 118*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 119*9880d681SAndroid Build Coastguard Worker; 120*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hadd_epi32: 121*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 122*9880d681SAndroid Build Coastguard Worker; X64-NEXT: phaddd %xmm1, %xmm0 123*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 124*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <4 x i32> 125*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <4 x i32> 126*9880d681SAndroid Build Coastguard Worker %call = call <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32> %arg0, <4 x i32> %arg1) 127*9880d681SAndroid Build Coastguard Worker %res = bitcast <4 x i32> %call to <2 x i64> 128*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.ssse3.phadd.d.128(<4 x i32>, <4 x i32>) nounwind readnone 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hadds_epi16(<2 x i64> %a0, <2 x i64> %a1) { 133*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hadds_epi16: 134*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 135*9880d681SAndroid Build Coastguard Worker; X32-NEXT: phaddsw %xmm1, %xmm0 136*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 137*9880d681SAndroid Build Coastguard Worker; 138*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hadds_epi16: 139*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 140*9880d681SAndroid Build Coastguard Worker; X64-NEXT: phaddsw %xmm1, %xmm0 141*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 142*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <8 x i16> 143*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <8 x i16> 144*9880d681SAndroid Build Coastguard Worker %call = call <8 x i16> @llvm.x86.ssse3.phadd.sw.128(<8 x i16> %arg0, <8 x i16> %arg1) 145*9880d681SAndroid Build Coastguard Worker %res = bitcast <8 x i16> %call to <2 x i64> 146*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 147*9880d681SAndroid Build Coastguard Worker} 148*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.phadd.sw.128(<8 x i16>, <8 x i16>) nounwind readnone 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hsub_epi16(<2 x i64> %a0, <2 x i64> %a1) { 151*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hsub_epi16: 152*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 153*9880d681SAndroid Build Coastguard Worker; X32-NEXT: phsubw %xmm1, %xmm0 154*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 155*9880d681SAndroid Build Coastguard Worker; 156*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hsub_epi16: 157*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 158*9880d681SAndroid Build Coastguard Worker; X64-NEXT: phsubw %xmm1, %xmm0 159*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 160*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <8 x i16> 161*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <8 x i16> 162*9880d681SAndroid Build Coastguard Worker %call = call <8 x i16> @llvm.x86.ssse3.phsub.w.128(<8 x i16> %arg0, <8 x i16> %arg1) 163*9880d681SAndroid Build Coastguard Worker %res = bitcast <8 x i16> %call to <2 x i64> 164*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 165*9880d681SAndroid Build Coastguard Worker} 166*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.phsub.w.128(<8 x i16>, <8 x i16>) nounwind readnone 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hsub_epi32(<2 x i64> %a0, <2 x i64> %a1) { 169*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hsub_epi32: 170*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 171*9880d681SAndroid Build Coastguard Worker; X32-NEXT: phsubd %xmm1, %xmm0 172*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 173*9880d681SAndroid Build Coastguard Worker; 174*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hsub_epi32: 175*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 176*9880d681SAndroid Build Coastguard Worker; X64-NEXT: phsubd %xmm1, %xmm0 177*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 178*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <4 x i32> 179*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <4 x i32> 180*9880d681SAndroid Build Coastguard Worker %call = call <4 x i32> @llvm.x86.ssse3.phsub.d.128(<4 x i32> %arg0, <4 x i32> %arg1) 181*9880d681SAndroid Build Coastguard Worker %res = bitcast <4 x i32> %call to <2 x i64> 182*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 183*9880d681SAndroid Build Coastguard Worker} 184*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.ssse3.phsub.d.128(<4 x i32>, <4 x i32>) nounwind readnone 185*9880d681SAndroid Build Coastguard Worker 186*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_hsubs_epi16(<2 x i64> %a0, <2 x i64> %a1) { 187*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_hsubs_epi16: 188*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 189*9880d681SAndroid Build Coastguard Worker; X32-NEXT: phsubsw %xmm1, %xmm0 190*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 191*9880d681SAndroid Build Coastguard Worker; 192*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_hsubs_epi16: 193*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 194*9880d681SAndroid Build Coastguard Worker; X64-NEXT: phsubsw %xmm1, %xmm0 195*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 196*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <8 x i16> 197*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <8 x i16> 198*9880d681SAndroid Build Coastguard Worker %call = call <8 x i16> @llvm.x86.ssse3.phsub.sw.128(<8 x i16> %arg0, <8 x i16> %arg1) 199*9880d681SAndroid Build Coastguard Worker %res = bitcast <8 x i16> %call to <2 x i64> 200*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 201*9880d681SAndroid Build Coastguard Worker} 202*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.phsub.sw.128(<8 x i16>, <8 x i16>) nounwind readnone 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_maddubs_epi16(<2 x i64> %a0, <2 x i64> %a1) { 205*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_maddubs_epi16: 206*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 207*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pmaddubsw %xmm1, %xmm0 208*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 209*9880d681SAndroid Build Coastguard Worker; 210*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_maddubs_epi16: 211*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 212*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pmaddubsw %xmm1, %xmm0 213*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 214*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <16 x i8> 215*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <16 x i8> 216*9880d681SAndroid Build Coastguard Worker %call = call <8 x i16> @llvm.x86.ssse3.pmadd.ub.sw.128(<16 x i8> %arg0, <16 x i8> %arg1) 217*9880d681SAndroid Build Coastguard Worker %res = bitcast <8 x i16> %call to <2 x i64> 218*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 219*9880d681SAndroid Build Coastguard Worker} 220*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.pmadd.ub.sw.128(<16 x i8>, <16 x i8>) nounwind readnone 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_mulhrs_epi16(<2 x i64> %a0, <2 x i64> %a1) { 223*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_mulhrs_epi16: 224*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 225*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pmulhrsw %xmm1, %xmm0 226*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 227*9880d681SAndroid Build Coastguard Worker; 228*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_mulhrs_epi16: 229*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 230*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pmulhrsw %xmm1, %xmm0 231*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 232*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <8 x i16> 233*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <8 x i16> 234*9880d681SAndroid Build Coastguard Worker %call = call <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16> %arg0, <8 x i16> %arg1) 235*9880d681SAndroid Build Coastguard Worker %res = bitcast <8 x i16> %call to <2 x i64> 236*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 237*9880d681SAndroid Build Coastguard Worker} 238*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.pmul.hr.sw.128(<8 x i16>, <8 x i16>) nounwind readnone 239*9880d681SAndroid Build Coastguard Worker 240*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_shuffle_epi8(<2 x i64> %a0, <2 x i64> %a1) { 241*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_shuffle_epi8: 242*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 243*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pshufb %xmm1, %xmm0 244*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 245*9880d681SAndroid Build Coastguard Worker; 246*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_shuffle_epi8: 247*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 248*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pshufb %xmm1, %xmm0 249*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 250*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <16 x i8> 251*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <16 x i8> 252*9880d681SAndroid Build Coastguard Worker %call = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %arg0, <16 x i8> %arg1) 253*9880d681SAndroid Build Coastguard Worker %res = bitcast <16 x i8> %call to <2 x i64> 254*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 255*9880d681SAndroid Build Coastguard Worker} 256*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8>, <16 x i8>) nounwind readnone 257*9880d681SAndroid Build Coastguard Worker 258*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_sign_epi8(<2 x i64> %a0, <2 x i64> %a1) { 259*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sign_epi8: 260*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 261*9880d681SAndroid Build Coastguard Worker; X32-NEXT: psignb %xmm1, %xmm0 262*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 263*9880d681SAndroid Build Coastguard Worker; 264*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sign_epi8: 265*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 266*9880d681SAndroid Build Coastguard Worker; X64-NEXT: psignb %xmm1, %xmm0 267*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 268*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <16 x i8> 269*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <16 x i8> 270*9880d681SAndroid Build Coastguard Worker %call = call <16 x i8> @llvm.x86.ssse3.psign.b.128(<16 x i8> %arg0, <16 x i8> %arg1) 271*9880d681SAndroid Build Coastguard Worker %res = bitcast <16 x i8> %call to <2 x i64> 272*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 273*9880d681SAndroid Build Coastguard Worker} 274*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.ssse3.psign.b.128(<16 x i8>, <16 x i8>) nounwind readnone 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_sign_epi16(<2 x i64> %a0, <2 x i64> %a1) { 277*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sign_epi16: 278*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 279*9880d681SAndroid Build Coastguard Worker; X32-NEXT: psignw %xmm1, %xmm0 280*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 281*9880d681SAndroid Build Coastguard Worker; 282*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sign_epi16: 283*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 284*9880d681SAndroid Build Coastguard Worker; X64-NEXT: psignw %xmm1, %xmm0 285*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 286*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <8 x i16> 287*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <8 x i16> 288*9880d681SAndroid Build Coastguard Worker %call = call <8 x i16> @llvm.x86.ssse3.psign.w.128(<8 x i16> %arg0, <8 x i16> %arg1) 289*9880d681SAndroid Build Coastguard Worker %res = bitcast <8 x i16> %call to <2 x i64> 290*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 291*9880d681SAndroid Build Coastguard Worker} 292*9880d681SAndroid Build Coastguard Workerdeclare <8 x i16> @llvm.x86.ssse3.psign.w.128(<8 x i16>, <8 x i16>) nounwind readnone 293*9880d681SAndroid Build Coastguard Worker 294*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_mm_sign_epi32(<2 x i64> %a0, <2 x i64> %a1) { 295*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sign_epi32: 296*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 297*9880d681SAndroid Build Coastguard Worker; X32-NEXT: psignd %xmm1, %xmm0 298*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 299*9880d681SAndroid Build Coastguard Worker; 300*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sign_epi32: 301*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 302*9880d681SAndroid Build Coastguard Worker; X64-NEXT: psignd %xmm1, %xmm0 303*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 304*9880d681SAndroid Build Coastguard Worker %arg0 = bitcast <2 x i64> %a0 to <4 x i32> 305*9880d681SAndroid Build Coastguard Worker %arg1 = bitcast <2 x i64> %a1 to <4 x i32> 306*9880d681SAndroid Build Coastguard Worker %call = call <4 x i32> @llvm.x86.ssse3.psign.d.128(<4 x i32> %arg0, <4 x i32> %arg1) 307*9880d681SAndroid Build Coastguard Worker %res = bitcast <4 x i32> %call to <2 x i64> 308*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 309*9880d681SAndroid Build Coastguard Worker} 310*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.ssse3.psign.d.128(<4 x i32>, <4 x i32>) nounwind readnone 311