forked from OSchip/llvm-project
[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.
This commit is contained in:
parent
efc5857b0b
commit
1ecf39d607
|
@ -30002,10 +30002,14 @@ void X86TargetLowering::ReplaceNodeResults(SDNode *N,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DstVT.isVector() && SrcVT == MVT::x86mmx) {
|
if (DstVT.isVector() && SrcVT == MVT::x86mmx) {
|
||||||
|
// FIXME: Use v4f32 for SSE1?
|
||||||
|
assert(Subtarget.hasSSE2() && "Requires SSE2");
|
||||||
assert(getTypeAction(*DAG.getContext(), DstVT) == TypeWidenVector &&
|
assert(getTypeAction(*DAG.getContext(), DstVT) == TypeWidenVector &&
|
||||||
"Unexpected type action!");
|
"Unexpected type action!");
|
||||||
EVT WideVT = getTypeToTransformTo(*DAG.getContext(), DstVT);
|
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);
|
Results.push_back(Res);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue