Revert "[SelectionDAG] Remove PromoteIntOp_EXTRACT_SUBVECTOR."
This reverts commit 3e8d2008f7
.
The code removed in this commit is actually required for extracting
fixed types from illegal scalable types, hence this commit causes
assertion failures in such extracts.
This commit is contained in:
parent
b41e86642e
commit
7c68d4b8ff
|
@ -1590,6 +1590,7 @@ bool DAGTypeLegalizer::PromoteIntegerOperand(SDNode *N, unsigned OpNo) {
|
|||
case ISD::UINT_TO_FP: Res = PromoteIntOp_UINT_TO_FP(N); break;
|
||||
case ISD::STRICT_UINT_TO_FP: Res = PromoteIntOp_STRICT_UINT_TO_FP(N); break;
|
||||
case ISD::ZERO_EXTEND: Res = PromoteIntOp_ZERO_EXTEND(N); break;
|
||||
case ISD::EXTRACT_SUBVECTOR: Res = PromoteIntOp_EXTRACT_SUBVECTOR(N); break;
|
||||
case ISD::INSERT_SUBVECTOR: Res = PromoteIntOp_INSERT_SUBVECTOR(N); break;
|
||||
|
||||
case ISD::SHL:
|
||||
|
@ -5222,6 +5223,16 @@ SDValue DAGTypeLegalizer::PromoteIntOp_INSERT_SUBVECTOR(SDNode *N) {
|
|||
return DAG.getAnyExtOrTrunc(Ext, dl, N->getValueType(0));
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_EXTRACT_SUBVECTOR(SDNode *N) {
|
||||
SDLoc dl(N);
|
||||
SDValue V0 = GetPromotedInteger(N->getOperand(0));
|
||||
MVT InVT = V0.getValueType().getSimpleVT();
|
||||
MVT OutVT = MVT::getVectorVT(InVT.getVectorElementType(),
|
||||
N->getValueType(0).getVectorNumElements());
|
||||
SDValue Ext = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, OutVT, V0, N->getOperand(1));
|
||||
return DAG.getNode(ISD::TRUNCATE, dl, N->getValueType(0), Ext);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_CONCAT_VECTORS(SDNode *N) {
|
||||
SDLoc dl(N);
|
||||
|
||||
|
|
|
@ -375,6 +375,7 @@ private:
|
|||
SDValue PromoteIntOp_BUILD_VECTOR(SDNode *N);
|
||||
SDValue PromoteIntOp_INSERT_VECTOR_ELT(SDNode *N, unsigned OpNo);
|
||||
SDValue PromoteIntOp_EXTRACT_VECTOR_ELT(SDNode *N);
|
||||
SDValue PromoteIntOp_EXTRACT_SUBVECTOR(SDNode *N);
|
||||
SDValue PromoteIntOp_INSERT_SUBVECTOR(SDNode *N);
|
||||
SDValue PromoteIntOp_CONCAT_VECTORS(SDNode *N);
|
||||
SDValue PromoteIntOp_SCALAR_TO_VECTOR(SDNode *N);
|
||||
|
|
Loading…
Reference in New Issue