llvm.org GIT mirror llvm / fd17f42
Use movq to move low half of XMM register and zero-extend the rest. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50874 91177308-0d34-0410-b5e6-96231b3b80d8 Evan Cheng 12 years ago
2 changed file(s) with 12 addition(s) and 1 deletion(s). Raw diff Collapse all Expand all
29152915 def : Pat<(v2f64 (vector_shuffle immAllZerosV_bc, VR128:$src,
29162916 MOVL_shuffle_mask)),
29172917 (MOVZPQILo2PQIrr VR128:$src)>, Requires<[HasSSE2]>;
2918
2918 def : Pat<(v2f64 (X86zvmovl (v2f64 VR128:$src))),
2919 (MOVZPQILo2PQIrr VR128:$src)>, Requires<[HasSSE2]>;
29192920
29202921 // FIXME: Temporary workaround since 2-wide shuffle is broken.
29212922 def : Pat<(int_x86_sse2_movs_d VR128:$src1, VR128:$src2),
0 ; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | grep movq
1
2 define i32 @t(float %X) nounwind {
3 %tmp11 = insertelement <4 x float> undef, float %X, i32 0
4 %tmp12 = insertelement <4 x float> %tmp11, float %X, i32 1
5 %tmp27 = insertelement <4 x float> %tmp12, float 0.000000e+00, i32 2
6 %tmp28 = insertelement <4 x float> %tmp27, float 0.000000e+00, i32 3
7 store <4 x float> %tmp28, <4 x float>* null, align 16
8 ret i32 0
9 }