From: Simon Pilgrim Date: Sun, 2 Apr 2017 15:52:28 +0000 (+0000) Subject: [X86][MMX] Added support for subvector extraction to MMX register X-Git-Tag: android-x86-7.1-r4~18190 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=4475a6621a274b3a98353fb437ef71d28023a2c3;p=android-x86%2Fexternal-llvm.git [X86][MMX] Added support for subvector extraction to MMX register git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@299335 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 11b3c2e32f6..7eecd2410fe 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -28958,8 +28958,10 @@ static SDValue combineBitcast(SDNode *N, SelectionDAG &DAG, return DAG.getNode(X86ISD::MMX_MOVW2D, SDLoc(N00), VT, N00); } - // Detect bitcasts between v2i64/v2f64 extraction to x86mmx. - if (VT == MVT::x86mmx && N0.getOpcode() == ISD::EXTRACT_VECTOR_ELT && + // Detect bitcasts between element or subvector extraction to x86mmx. + if (VT == MVT::x86mmx && + (N0.getOpcode() == ISD::EXTRACT_VECTOR_ELT || + N0.getOpcode() == ISD::EXTRACT_SUBVECTOR) && isNullConstant(N0.getOperand(1))) { SDValue N00 = N0->getOperand(0); if (N00.getValueType().is128BitVector()) diff --git a/test/CodeGen/X86/mmx-cvt.ll b/test/CodeGen/X86/mmx-cvt.ll index 881b0a426cb..83cab9610bb 100644 --- a/test/CodeGen/X86/mmx-cvt.ll +++ b/test/CodeGen/X86/mmx-cvt.ll @@ -193,11 +193,10 @@ define void @fptosi_v4f32_v4i32(<4 x float>, <1 x i64>*) nounwind { ; X86-NEXT: pushl %ebp ; X86-NEXT: movl %esp, %ebp ; X86-NEXT: andl $-8, %esp -; X86-NEXT: subl $16, %esp +; X86-NEXT: subl $8, %esp ; X86-NEXT: movl 8(%ebp), %eax ; X86-NEXT: cvttps2dq %xmm0, %xmm0 -; X86-NEXT: movlps %xmm0, {{[0-9]+}}(%esp) -; X86-NEXT: movq {{[0-9]+}}(%esp), %mm0 +; X86-NEXT: movdq2q %xmm0, %mm0 ; X86-NEXT: paddd %mm0, %mm0 ; X86-NEXT: movq %mm0, (%esp) ; X86-NEXT: movl (%esp), %ecx @@ -211,8 +210,7 @@ define void @fptosi_v4f32_v4i32(<4 x float>, <1 x i64>*) nounwind { ; X64-LABEL: fptosi_v4f32_v4i32: ; X64: # BB#0: ; X64-NEXT: cvttps2dq %xmm0, %xmm0 -; X64-NEXT: movlps %xmm0, -{{[0-9]+}}(%rsp) -; X64-NEXT: movq -{{[0-9]+}}(%rsp), %mm0 +; X64-NEXT: movdq2q %xmm0, %mm0 ; X64-NEXT: paddd %mm0, %mm0 ; X64-NEXT: movq %mm0, (%rdi) ; X64-NEXT: retq