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=i686-unknown -mattr=+sse2,-sse4.1 | FileCheck %s --check-prefix=X32 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse2,-sse4.1 | FileCheck %s --check-prefix=X64 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @t1(float %s, <4 x float> %tmp) nounwind { 6*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t1: 7*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 8*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero 9*9880d681SAndroid Build Coastguard Worker; X32-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[2,0] 10*9880d681SAndroid Build Coastguard Worker; X32-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,0] 11*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 12*9880d681SAndroid Build Coastguard Worker; 13*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t1: 14*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 15*9880d681SAndroid Build Coastguard Worker; X64-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[2,0] 16*9880d681SAndroid Build Coastguard Worker; X64-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0] 17*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movaps %xmm1, %xmm0 18*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 19*9880d681SAndroid Build Coastguard Worker %tmp1 = insertelement <4 x float> %tmp, float %s, i32 3 20*9880d681SAndroid Build Coastguard Worker ret <4 x float> %tmp1 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @t2(i32 %s, <4 x i32> %tmp) nounwind { 24*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t2: 25*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 26*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero 27*9880d681SAndroid Build Coastguard Worker; X32-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[2,0] 28*9880d681SAndroid Build Coastguard Worker; X32-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,0] 29*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 30*9880d681SAndroid Build Coastguard Worker; 31*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t2: 32*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 33*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movd %edi, %xmm1 34*9880d681SAndroid Build Coastguard Worker; X64-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[2,0] 35*9880d681SAndroid Build Coastguard Worker; X64-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,0] 36*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 37*9880d681SAndroid Build Coastguard Worker %tmp1 = insertelement <4 x i32> %tmp, i32 %s, i32 3 38*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %tmp1 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @t3(double %s, <2 x double> %tmp) nounwind { 42*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t3: 43*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 44*9880d681SAndroid Build Coastguard Worker; X32-NEXT: movhpd {{.*#+}} xmm0 = xmm0[0],mem[0] 45*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 46*9880d681SAndroid Build Coastguard Worker; 47*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t3: 48*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 49*9880d681SAndroid Build Coastguard Worker; X64-NEXT: unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0] 50*9880d681SAndroid Build Coastguard Worker; X64-NEXT: movapd %xmm1, %xmm0 51*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 52*9880d681SAndroid Build Coastguard Worker %tmp1 = insertelement <2 x double> %tmp, double %s, i32 1 53*9880d681SAndroid Build Coastguard Worker ret <2 x double> %tmp1 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @t4(i16 %s, <8 x i16> %tmp) nounwind { 57*9880d681SAndroid Build Coastguard Worker; X32-LABEL: t4: 58*9880d681SAndroid Build Coastguard Worker; X32: # BB#0: 59*9880d681SAndroid Build Coastguard Worker; X32-NEXT: pinsrw $5, {{[0-9]+}}(%esp), %xmm0 60*9880d681SAndroid Build Coastguard Worker; X32-NEXT: retl 61*9880d681SAndroid Build Coastguard Worker; 62*9880d681SAndroid Build Coastguard Worker; X64-LABEL: t4: 63*9880d681SAndroid Build Coastguard Worker; X64: # BB#0: 64*9880d681SAndroid Build Coastguard Worker; X64-NEXT: pinsrw $5, %edi, %xmm0 65*9880d681SAndroid Build Coastguard Worker; X64-NEXT: retq 66*9880d681SAndroid Build Coastguard Worker %tmp1 = insertelement <8 x i16> %tmp, i16 %s, i32 5 67*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %tmp1 68*9880d681SAndroid Build Coastguard Worker} 69