From: Craig Topper Date: Sun, 31 May 2020 00:03:53 +0000 (-0700) Subject: [X86] Fix a place where we created MOVQ2DQ with a DstVT other than v2i64. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1ecf39d607acdb04c2bb5155e5f7265db2484511;p=platform%2Fupstream%2Fllvm.git [X86] Fix a place where we created MOVQ2DQ with a DstVT other than v2i64. The type profile and isel pattern have this type declared as being MVT::v2i64. But isel skips the explicit type check due to the type profile. --- diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 0b114b3..6ebd468 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -30002,10 +30002,14 @@ void X86TargetLowering::ReplaceNodeResults(SDNode *N, } if (DstVT.isVector() && SrcVT == MVT::x86mmx) { + // FIXME: Use v4f32 for SSE1? + assert(Subtarget.hasSSE2() && "Requires SSE2"); assert(getTypeAction(*DAG.getContext(), DstVT) == TypeWidenVector && "Unexpected type action!"); EVT WideVT = getTypeToTransformTo(*DAG.getContext(), DstVT); - SDValue Res = DAG.getNode(X86ISD::MOVQ2DQ, dl, WideVT, N->getOperand(0)); + SDValue Res = DAG.getNode(X86ISD::MOVQ2DQ, dl, MVT::v2i64, + N->getOperand(0)); + Res = DAG.getBitcast(WideVT, Res); Results.push_back(Res); return; }