forked from OSchip/llvm-project
[SelectionDAG] Added getBuildVector(ArrayRef<SDUse>) helper.
llvm-svn: 301322
This commit is contained in:
parent
c13df8e5e0
commit
d68785803b
|
@ -654,6 +654,15 @@ public:
|
|||
return getNode(ISD::BUILD_VECTOR, DL, VT, Ops);
|
||||
}
|
||||
|
||||
/// Return an ISD::BUILD_VECTOR node. The number of elements in VT,
|
||||
/// which must be a vector type, must match the number of operands in Ops.
|
||||
/// The operands must have the same type as (or, for integers, a type wider
|
||||
/// than) VT's element type.
|
||||
SDValue getBuildVector(EVT VT, const SDLoc &DL, ArrayRef<SDUse> Ops) {
|
||||
// VerifySDNode (via InsertNode) checks BUILD_VECTOR later.
|
||||
return getNode(ISD::BUILD_VECTOR, DL, VT, Ops);
|
||||
}
|
||||
|
||||
/// Return a splat ISD::BUILD_VECTOR node, consisting of Op splatted to all
|
||||
/// elements. VT must be a vector type. Op's type must be the same as (or,
|
||||
/// for integers, a type wider than) VT's element type.
|
||||
|
@ -968,7 +977,7 @@ public:
|
|||
bool IsExpanding = false);
|
||||
SDValue getMaskedStore(SDValue Chain, const SDLoc &dl, SDValue Val,
|
||||
SDValue Ptr, SDValue Mask, EVT MemVT,
|
||||
MachineMemOperand *MMO, bool IsTruncating = false,
|
||||
MachineMemOperand *MMO, bool IsTruncating = false,
|
||||
bool IsCompressing = false);
|
||||
SDValue getMaskedGather(SDVTList VTs, EVT VT, const SDLoc &dl,
|
||||
ArrayRef<SDValue> Ops, MachineMemOperand *MMO);
|
||||
|
|
|
@ -5060,8 +5060,8 @@ static SDValue extractSubVector(SDValue Vec, unsigned IdxVal, SelectionDAG &DAG,
|
|||
|
||||
// If the input is a buildvector just emit a smaller one.
|
||||
if (Vec.getOpcode() == ISD::BUILD_VECTOR)
|
||||
return DAG.getNode(ISD::BUILD_VECTOR, dl, ResultVT,
|
||||
makeArrayRef(Vec->op_begin() + IdxVal, ElemsPerChunk));
|
||||
return DAG.getBuildVector(
|
||||
ResultVT, dl, makeArrayRef(Vec->op_begin() + IdxVal, ElemsPerChunk));
|
||||
|
||||
SDValue VecIdx = DAG.getIntPtrConstant(IdxVal, dl);
|
||||
return DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, ResultVT, Vec, VecIdx);
|
||||
|
@ -14424,8 +14424,8 @@ static SDValue LowerEXTRACT_SUBVECTOR(SDValue Op, const X86Subtarget &Subtarget,
|
|||
// If the input is a buildvector just emit a smaller one.
|
||||
unsigned ElemsPerChunk = ResVT.getVectorNumElements();
|
||||
if (In.getOpcode() == ISD::BUILD_VECTOR)
|
||||
return DAG.getNode(ISD::BUILD_VECTOR, dl, ResVT,
|
||||
makeArrayRef(In->op_begin() + IdxVal, ElemsPerChunk));
|
||||
return DAG.getBuildVector(
|
||||
ResVT, dl, makeArrayRef(In->op_begin() + IdxVal, ElemsPerChunk));
|
||||
|
||||
// Everything else is legal.
|
||||
return Op;
|
||||
|
|
Loading…
Reference in New Issue