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=i386-unknown -mattr=+sse2,+ssse3 | FileCheck %s --check-prefix=X32 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse2,+ssse3 | FileCheck %s --check-prefix=X64 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; There are no MMX operations in @t1 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine void @t1(i32 %a, x86_mmx* %P) nounwind { 8*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t1: 9*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 10*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 11*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx 12*9880d681SAndroid Build Coastguard Worker; X32-NEXT: shll $12, %ecx 13*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movd %ecx, %xmm0 14*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,0,1,1] 15*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movq %xmm0, (%eax) 16*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 17*9880d681SAndroid Build Coastguard Worker; 18*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t1: 19*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 20*9880d681SAndroid Build Coastguard Worker; X64-NEXT: # kill: %EDI<def> %EDI<kill> %RDI<def> 21*9880d681SAndroid Build Coastguard Worker; X64-NEXT: shll $12, %edi 22*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movd %rdi, %xmm0 23*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2,3,4,5,6,7] 24*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3] 25*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movq %xmm0, (%rsi) 26*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 27*9880d681SAndroid Build Coastguard Worker %tmp12 = shl i32 %a, 12 28*9880d681SAndroid Build Coastguard Worker %tmp21 = insertelement <2 x i32> undef, i32 %tmp12, i32 1 29*9880d681SAndroid Build Coastguard Worker %tmp22 = insertelement <2 x i32> %tmp21, i32 0, i32 0 30*9880d681SAndroid Build Coastguard Worker %tmp23 = bitcast <2 x i32> %tmp22 to x86_mmx 31*9880d681SAndroid Build Coastguard Worker store x86_mmx %tmp23, x86_mmx* %P 32*9880d681SAndroid Build Coastguard Worker ret void 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @t2(<4 x float>* %P) nounwind { 36*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t2: 37*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 38*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 39*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movaps (%eax), %xmm1 40*9880d681SAndroid Build Coastguard Worker; X32-NEXT: xorps %xmm0, %xmm0 41*9880d681SAndroid Build Coastguard Worker; X32-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[2,0] 42*9880d681SAndroid Build Coastguard Worker; X32-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,0] 43*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 44*9880d681SAndroid Build Coastguard Worker; 45*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t2: 46*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 47*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movaps (%rdi), %xmm1 48*9880d681SAndroid Build Coastguard Worker; X64-NEXT: xorps %xmm0, %xmm0 49*9880d681SAndroid Build Coastguard Worker; X64-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[2,0] 50*9880d681SAndroid Build Coastguard Worker; X64-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,0] 51*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 52*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x float>, <4 x float>* %P 53*9880d681SAndroid Build Coastguard Worker %tmp2 = shufflevector <4 x float> %tmp1, <4 x float> zeroinitializer, <4 x i32> < i32 4, i32 4, i32 4, i32 0 > 54*9880d681SAndroid Build Coastguard Worker ret <4 x float> %tmp2 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @t3(<4 x float>* %P) nounwind { 58*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t3: 59*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 60*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 61*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movapd (%eax), %xmm0 62*9880d681SAndroid Build Coastguard Worker; X32-NEXT: xorpd %xmm1, %xmm1 63*9880d681SAndroid Build Coastguard Worker; X32-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] 64*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 65*9880d681SAndroid Build Coastguard Worker; 66*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t3: 67*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 68*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movapd (%rdi), %xmm0 69*9880d681SAndroid Build Coastguard Worker; X64-NEXT: xorpd %xmm1, %xmm1 70*9880d681SAndroid Build Coastguard Worker; X64-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1] 71*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 72*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x float>, <4 x float>* %P 73*9880d681SAndroid Build Coastguard Worker %tmp2 = shufflevector <4 x float> %tmp1, <4 x float> zeroinitializer, <4 x i32> < i32 2, i32 3, i32 4, i32 4 > 74*9880d681SAndroid Build Coastguard Worker ret <4 x float> %tmp2 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @t4(<4 x float>* %P) nounwind { 78*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t4: 79*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 80*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movl {{[0-9]+}}(%esp), %eax 81*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movaps (%eax), %xmm0 82*9880d681SAndroid Build Coastguard Worker; X32-NEXT: xorps %xmm1, %xmm1 83*9880d681SAndroid Build Coastguard Worker; X32-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[1,0] 84*9880d681SAndroid Build Coastguard Worker; X32-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[2,3] 85*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 86*9880d681SAndroid Build Coastguard Worker; 87*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t4: 88*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 89*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movaps (%rdi), %xmm0 90*9880d681SAndroid Build Coastguard Worker; X64-NEXT: xorps %xmm1, %xmm1 91*9880d681SAndroid Build Coastguard Worker; X64-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,0],xmm1[1,0] 92*9880d681SAndroid Build Coastguard Worker; X64-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[2,3] 93*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 94*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x float>, <4 x float>* %P 95*9880d681SAndroid Build Coastguard Worker %tmp2 = shufflevector <4 x float> zeroinitializer, <4 x float> %tmp1, <4 x i32> < i32 7, i32 0, i32 0, i32 0 > 96*9880d681SAndroid Build Coastguard Worker ret <4 x float> %tmp2 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t5(<16 x i8> %x) nounwind { 100*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t5: 101*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 102*9880d681SAndroid Build Coastguard Worker; X32-NEXT: psrlw $8, %xmm0 103*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 104*9880d681SAndroid Build Coastguard Worker; 105*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t5: 106*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 107*9880d681SAndroid Build Coastguard Worker; X64-NEXT: psrlw $8, %xmm0 108*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 109*9880d681SAndroid Build Coastguard Worker %s = shufflevector <16 x i8> %x, <16 x i8> zeroinitializer, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 17> 110*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %s 111*9880d681SAndroid Build Coastguard Worker} 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t6(<16 x i8> %x) nounwind { 114*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t6: 115*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 116*9880d681SAndroid Build Coastguard Worker; X32-NEXT: psrlw $8, %xmm0 117*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 118*9880d681SAndroid Build Coastguard Worker; 119*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t6: 120*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 121*9880d681SAndroid Build Coastguard Worker; X64-NEXT: psrlw $8, %xmm0 122*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 123*9880d681SAndroid Build Coastguard Worker %s = shufflevector <16 x i8> %x, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 124*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %s 125*9880d681SAndroid Build Coastguard Worker} 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t7(<16 x i8> %x) nounwind { 128*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t7: 129*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 130*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2] 131*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 132*9880d681SAndroid Build Coastguard Worker; 133*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t7: 134*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 135*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0,1,2] 136*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 137*9880d681SAndroid Build Coastguard Worker %s = shufflevector <16 x i8> %x, <16 x i8> undef, <16 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 1, i32 2> 138*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %s 139*9880d681SAndroid Build Coastguard Worker} 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t8(<16 x i8> %x) nounwind { 142*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t8: 143*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 144*9880d681SAndroid Build Coastguard Worker; X32-NEXT: psrldq {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero 145*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 146*9880d681SAndroid Build Coastguard Worker; 147*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t8: 148*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 149*9880d681SAndroid Build Coastguard Worker; X64-NEXT: psrldq {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero 150*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 151*9880d681SAndroid Build Coastguard Worker %s = shufflevector <16 x i8> %x, <16 x i8> zeroinitializer, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 8, i32 9, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 17> 152*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %s 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t9(<16 x i8> %x) nounwind { 156*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t9: 157*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 158*9880d681SAndroid Build Coastguard Worker; X32-NEXT: psrldq {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero 159*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 160*9880d681SAndroid Build Coastguard Worker; 161*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t9: 162*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 163*9880d681SAndroid Build Coastguard Worker; X64-NEXT: psrldq {{.*#+}} xmm0 = xmm0[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],zero 164*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 165*9880d681SAndroid Build Coastguard Worker %s = shufflevector <16 x i8> %x, <16 x i8> undef, <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 7, i32 8, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 14, i32 undef, i32 undef> 166*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %s 167*9880d681SAndroid Build Coastguard Worker} 168