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=+ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSSE3 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2 6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512F 7*9880d681SAndroid Build Coastguard Worker; 8*9880d681SAndroid Build Coastguard Worker; Combine tests involving SSE3/SSSE3 target shuffles (MOVDDUP, MOVSHDUP, MOVSLDUP, PSHUFB) 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdeclare <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8>, <16 x i8>) 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_vpshufb_zero(<16 x i8> %a0) { 13*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_vpshufb_zero: 14*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 15*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: xorps %xmm0, %xmm0 16*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 17*9880d681SAndroid Build Coastguard Worker; 18*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_vpshufb_zero: 19*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 20*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 21*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 22*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 128, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>) 23*9880d681SAndroid Build Coastguard Worker %res1 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %res0, <16 x i8> <i8 0, i8 128, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>) 24*9880d681SAndroid Build Coastguard Worker %res2 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %res1, <16 x i8> <i8 0, i8 1, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>) 25*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res2 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_vpshufb_movq(<16 x i8> %a0) { 29*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_vpshufb_movq: 30*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 31*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movq {{.*#+}} xmm0 = xmm0[0],zero 32*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 33*9880d681SAndroid Build Coastguard Worker; 34*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_vpshufb_movq: 35*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 36*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vmovq {{.*#+}} xmm0 = xmm0[0],zero 37*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 38*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 0, i8 128, i8 1, i8 128, i8 2, i8 128, i8 3, i8 128, i8 4, i8 128, i8 5, i8 128, i8 6, i8 128, i8 7, i8 128>) 39*9880d681SAndroid Build Coastguard Worker %res1 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %res0, <16 x i8> <i8 0, i8 2, i8 4, i8 6, i8 8, i8 10, i8 12, i8 14, i8 1, i8 3, i8 5, i8 7, i8 9, i8 11, i8 13, i8 15>) 40*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res1 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @combine_pshufb_movddup(<4 x float> %a0) { 44*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_movddup: 45*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 46*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufb {{.*#+}} xmm0 = xmm0[5,5,5,5,7,7,7,7,5,5,5,5,7,7,7,7] 47*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 48*9880d681SAndroid Build Coastguard Worker; 49*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_movddup: 50*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 51*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[5,5,5,5,7,7,7,7,5,5,5,5,7,7,7,7] 52*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 53*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x float> %a0 to <16 x i8> 54*9880d681SAndroid Build Coastguard Worker %2 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> <i8 5, i8 5, i8 5, i8 5, i8 7, i8 7, i8 7, i8 7, i8 1, i8 1, i8 1, i8 1, i8 3, i8 3, i8 3, i8 3>) 55*9880d681SAndroid Build Coastguard Worker %3 = bitcast <16 x i8> %2 to <4 x float> 56*9880d681SAndroid Build Coastguard Worker %4 = shufflevector <4 x float> %3, <4 x float> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1> 57*9880d681SAndroid Build Coastguard Worker ret <4 x float> %4 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @combine_pshufb_movshdup(<4 x float> %a0) { 61*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_movshdup: 62*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 63*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufb {{.*#+}} xmm0 = xmm0[7,7,7,7,7,7,7,7,3,3,3,3,3,3,3,3] 64*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 65*9880d681SAndroid Build Coastguard Worker; 66*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_movshdup: 67*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 68*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[7,7,7,7,7,7,7,7,3,3,3,3,3,3,3,3] 69*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 70*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x float> %a0 to <16 x i8> 71*9880d681SAndroid Build Coastguard Worker %2 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> <i8 5, i8 5, i8 5, i8 5, i8 7, i8 7, i8 7, i8 7, i8 1, i8 1, i8 1, i8 1, i8 3, i8 3, i8 3, i8 3>) 72*9880d681SAndroid Build Coastguard Worker %3 = bitcast <16 x i8> %2 to <4 x float> 73*9880d681SAndroid Build Coastguard Worker %4 = shufflevector <4 x float> %3, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3> 74*9880d681SAndroid Build Coastguard Worker ret <4 x float> %4 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @combine_pshufb_movsldup(<4 x float> %a0) { 78*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_movsldup: 79*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 80*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufb {{.*#+}} xmm0 = xmm0[5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1] 81*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 82*9880d681SAndroid Build Coastguard Worker; 83*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_movsldup: 84*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 85*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[5,5,5,5,5,5,5,5,1,1,1,1,1,1,1,1] 86*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 87*9880d681SAndroid Build Coastguard Worker %1 = bitcast <4 x float> %a0 to <16 x i8> 88*9880d681SAndroid Build Coastguard Worker %2 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> <i8 5, i8 5, i8 5, i8 5, i8 7, i8 7, i8 7, i8 7, i8 1, i8 1, i8 1, i8 1, i8 3, i8 3, i8 3, i8 3>) 89*9880d681SAndroid Build Coastguard Worker %3 = bitcast <16 x i8> %2 to <4 x float> 90*9880d681SAndroid Build Coastguard Worker %4 = shufflevector <4 x float> %3, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2> 91*9880d681SAndroid Build Coastguard Worker ret <4 x float> %4 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_palignr(<16 x i8> %a0, <16 x i8> %a1) { 95*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_palignr: 96*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 97*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,2,3] 98*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 99*9880d681SAndroid Build Coastguard Worker; 100*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_palignr: 101*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 102*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufd {{.*#+}} xmm0 = xmm1[2,3,2,3] 103*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 104*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <16 x i8> %a0, <16 x i8> %a1, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23> 105*9880d681SAndroid Build Coastguard Worker %2 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>) 106*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 107*9880d681SAndroid Build Coastguard Worker} 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_pslldq(<16 x i8> %a0) { 110*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_pslldq: 111*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 112*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: xorps %xmm0, %xmm0 113*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 114*9880d681SAndroid Build Coastguard Worker; 115*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_pslldq: 116*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 117*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 118*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 119*9880d681SAndroid Build Coastguard Worker %1 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7>) 120*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <16 x i8> %1, <16 x i8> zeroinitializer, <16 x i32> <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 121*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_psrldq(<16 x i8> %a0) { 125*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_psrldq: 126*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 127*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: xorps %xmm0, %xmm0 128*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 129*9880d681SAndroid Build Coastguard Worker; 130*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_psrldq: 131*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 132*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 133*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 134*9880d681SAndroid Build Coastguard Worker %1 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>) 135*9880d681SAndroid Build Coastguard Worker %2 = shufflevector <16 x i8> %1, <16 x i8> zeroinitializer, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16> 136*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_as_pslldq(<16 x i8> %a0) { 140*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_as_pslldq: 141*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 142*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufb {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5] 143*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 144*9880d681SAndroid Build Coastguard Worker; 145*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_as_pslldq: 146*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 147*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5] 148*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 149*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5>) 150*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res0 151*9880d681SAndroid Build Coastguard Worker} 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_as_psrldq(<16 x i8> %a0) { 154*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_as_psrldq: 155*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 156*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufb {{.*#+}} xmm0 = xmm0[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero 157*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 158*9880d681SAndroid Build Coastguard Worker; 159*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_as_psrldq: 160*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 161*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero 162*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 163*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 15, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>) 164*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res0 165*9880d681SAndroid Build Coastguard Worker} 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_as_pshuflw(<16 x i8> %a0) { 168*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_as_pshuflw: 169*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 170*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7] 171*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 172*9880d681SAndroid Build Coastguard Worker; 173*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_as_pshuflw: 174*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 175*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[1,0,3,2,4,5,6,7] 176*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 177*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 2, i8 3, i8 0, i8 1, i8 6, i8 7, i8 4, i8 5, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>) 178*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res0 179*9880d681SAndroid Build Coastguard Worker} 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_as_pshufhw(<16 x i8> %a0) { 182*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_as_pshufhw: 183*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 184*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] 185*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 186*9880d681SAndroid Build Coastguard Worker; 187*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_as_pshufhw: 188*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 189*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,5,4,7,6] 190*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 191*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 10, i8 11, i8 8, i8 9, i8 14, i8 15, i8 12, i8 13>) 192*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res0 193*9880d681SAndroid Build Coastguard Worker} 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_not_as_pshufw(<16 x i8> %a0) { 196*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_not_as_pshufw: 197*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 198*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13] 199*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 200*9880d681SAndroid Build Coastguard Worker; 201*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_not_as_pshufw: 202*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 203*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13] 204*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 205*9880d681SAndroid Build Coastguard Worker %res0 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 2, i8 3, i8 0, i8 1, i8 6, i8 7, i8 4, i8 5, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>) 206*9880d681SAndroid Build Coastguard Worker %res1 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %res0, <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 10, i8 11, i8 8, i8 9, i8 14, i8 15, i8 12, i8 13>) 207*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %res1 208*9880d681SAndroid Build Coastguard Worker} 209*9880d681SAndroid Build Coastguard Worker 210*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_as_unary_unpcklbw(<16 x i8> %a0) { 211*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_as_unary_unpcklbw: 212*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 213*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 214*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 215*9880d681SAndroid Build Coastguard Worker; 216*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_as_unary_unpcklbw: 217*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 218*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 219*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 220*9880d681SAndroid Build Coastguard Worker %1 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 0, i8 undef, i8 undef, i8 1, i8 2, i8 2, i8 3, i8 3, i8 4, i8 4, i8 5, i8 5, i8 6, i8 6, i8 7, i8 7>) 221*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %1 222*9880d681SAndroid Build Coastguard Worker} 223*9880d681SAndroid Build Coastguard Worker 224*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_pshufb_as_unary_unpckhwd(<16 x i8> %a0) { 225*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_pshufb_as_unary_unpckhwd: 226*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 227*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: punpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7] 228*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 229*9880d681SAndroid Build Coastguard Worker; 230*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_pshufb_as_unary_unpckhwd: 231*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 232*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7] 233*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 234*9880d681SAndroid Build Coastguard Worker %1 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %a0, <16 x i8> <i8 8, i8 9, i8 8, i8 9, i8 10, i8 11, i8 10, i8 11, i8 12, i8 13, i8 12, i8 13, i8 14, i8 15, i8 undef, i8 undef>) 235*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %1 236*9880d681SAndroid Build Coastguard Worker} 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_unpckl_arg0_pshufb(<16 x i8> %a0, <16 x i8> %a1) { 239*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_unpckl_arg0_pshufb: 240*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 241*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero 242*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 243*9880d681SAndroid Build Coastguard Worker; 244*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_unpckl_arg0_pshufb: 245*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 246*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero,xmm0[0],zero,zero,zero 247*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 248*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <16 x i8> %a0, <16 x i8> %a1, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23> 249*9880d681SAndroid Build Coastguard Worker %2 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> <i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1>) 250*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 251*9880d681SAndroid Build Coastguard Worker} 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @combine_unpckl_arg1_pshufb(<16 x i8> %a0, <16 x i8> %a1) { 254*9880d681SAndroid Build Coastguard Worker; SSE-LABEL: combine_unpckl_arg1_pshufb: 255*9880d681SAndroid Build Coastguard Worker; SSE: # BB#0: 256*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: pshufb {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero 257*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: movdqa %xmm1, %xmm0 258*9880d681SAndroid Build Coastguard Worker; SSE-NEXT: retq 259*9880d681SAndroid Build Coastguard Worker; 260*9880d681SAndroid Build Coastguard Worker; AVX-LABEL: combine_unpckl_arg1_pshufb: 261*9880d681SAndroid Build Coastguard Worker; AVX: # BB#0: 262*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: vpshufb {{.*#+}} xmm0 = xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero,xmm1[0],zero,zero,zero 263*9880d681SAndroid Build Coastguard Worker; AVX-NEXT: retq 264*9880d681SAndroid Build Coastguard Worker %1 = shufflevector <16 x i8> %a0, <16 x i8> %a1, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23> 265*9880d681SAndroid Build Coastguard Worker %2 = tail call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> <i8 1, i8 -1, i8 -1, i8 -1, i8 1, i8 -1, i8 -1, i8 -1, i8 1, i8 -1, i8 -1, i8 -1, i8 1, i8 -1, i8 -1, i8 -1>) 266*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %2 267*9880d681SAndroid Build Coastguard Worker} 268