forked from OSchip/llvm-project
[X86] Qualify part of the masked gather handling in ReplaceNodeResults with a getTypeAction call to know if we can use default legalization.
If we managed to switch to -x86-experimental-vector-widening-legalization this block can be removed. llvm-svn: 347100
This commit is contained in:
parent
c505ceeb3c
commit
87bc07b3dd
|
@ -26654,28 +26654,30 @@ void X86TargetLowering::ReplaceNodeResults(SDNode *N,
|
|||
Results.push_back(Chain);
|
||||
return;
|
||||
}
|
||||
EVT IndexVT = Index.getValueType();
|
||||
EVT NewIndexVT = EVT::getVectorVT(*DAG.getContext(),
|
||||
IndexVT.getScalarType(), 4);
|
||||
// Otherwise we need to custom widen everything to avoid promotion.
|
||||
Index = DAG.getNode(ISD::CONCAT_VECTORS, dl, NewIndexVT, Index,
|
||||
DAG.getUNDEF(IndexVT));
|
||||
Mask = DAG.getNode(ISD::CONCAT_VECTORS, dl, MVT::v4i1, Mask,
|
||||
DAG.getConstant(0, dl, MVT::v2i1));
|
||||
SDValue Ops[] = { Gather->getChain(), PassThru, Mask,
|
||||
Gather->getBasePtr(), Index, Gather->getScale() };
|
||||
SDValue Res = DAG.getMaskedGather(DAG.getVTList(MVT::v4i32, MVT::Other),
|
||||
Gather->getMemoryVT(), dl, Ops,
|
||||
Gather->getMemOperand());
|
||||
SDValue Chain = Res.getValue(1);
|
||||
if (getTypeAction(*DAG.getContext(), MVT::v2i32) != TypeWidenVector)
|
||||
Res = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, MVT::v2i32, Res,
|
||||
DAG.getIntPtrConstant(0, dl));
|
||||
Results.push_back(Res);
|
||||
Results.push_back(Chain);
|
||||
return;
|
||||
if (getTypeAction(*DAG.getContext(), VT) != TypeWidenVector) {
|
||||
EVT IndexVT = Index.getValueType();
|
||||
EVT NewIndexVT = EVT::getVectorVT(*DAG.getContext(),
|
||||
IndexVT.getScalarType(), 4);
|
||||
// Otherwise we need to custom widen everything to avoid promotion.
|
||||
Index = DAG.getNode(ISD::CONCAT_VECTORS, dl, NewIndexVT, Index,
|
||||
DAG.getUNDEF(IndexVT));
|
||||
Mask = DAG.getNode(ISD::CONCAT_VECTORS, dl, MVT::v4i1, Mask,
|
||||
DAG.getConstant(0, dl, MVT::v2i1));
|
||||
SDValue Ops[] = { Gather->getChain(), PassThru, Mask,
|
||||
Gather->getBasePtr(), Index, Gather->getScale() };
|
||||
SDValue Res = DAG.getMaskedGather(DAG.getVTList(MVT::v4i32, MVT::Other),
|
||||
Gather->getMemoryVT(), dl, Ops,
|
||||
Gather->getMemOperand());
|
||||
SDValue Chain = Res.getValue(1);
|
||||
if (getTypeAction(*DAG.getContext(), MVT::v2i32) != TypeWidenVector)
|
||||
Res = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, MVT::v2i32, Res,
|
||||
DAG.getIntPtrConstant(0, dl));
|
||||
Results.push_back(Res);
|
||||
Results.push_back(Chain);
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
return;
|
||||
}
|
||||
case ISD::LOAD: {
|
||||
// Use an f64/i64 load and a scalar_to_vector for v2f32/v2i32 loads. This
|
||||
|
|
Loading…
Reference in New Issue