Skip to content

Commit 110f6a7

Browse files
authored
[SelectionDAG] Add getVPZeroExtendInReg. NFC (#92792)
Use it for 2 places in LegalizeIntegerTypes that created a VP_AND.
1 parent 33b7833 commit 110f6a7

File tree

3 files changed

+27
-8
lines changed

3 files changed

+27
-8
lines changed

llvm/include/llvm/CodeGen/SelectionDAG.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,11 @@ class SelectionDAG {
991991
/// value assuming it was the smaller SrcTy value.
992992
SDValue getZeroExtendInReg(SDValue Op, const SDLoc &DL, EVT VT);
993993

994+
/// Return the expression required to zero extend the Op
995+
/// value assuming it was the smaller SrcTy value.
996+
SDValue getVPZeroExtendInReg(SDValue Op, SDValue Mask, SDValue EVL,
997+
const SDLoc &DL, EVT VT);
998+
994999
/// Convert Op, which must be of integer type, to the integer type VT, by
9951000
/// either truncating it or performing either zero or sign extension as
9961001
/// appropriate extension for the pointer's semantics.

llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1511,10 +1511,7 @@ SDValue DAGTypeLegalizer::PromoteIntRes_VPFunnelShift(SDNode *N) {
15111511
!TLI.isOperationLegalOrCustom(Opcode, VT)) {
15121512
SDValue HiShift = DAG.getConstant(OldBits, DL, VT);
15131513
Hi = DAG.getNode(ISD::VP_SHL, DL, VT, Hi, HiShift, Mask, EVL);
1514-
APInt Imm = APInt::getLowBitsSet(VT.getScalarSizeInBits(),
1515-
OldVT.getScalarSizeInBits());
1516-
Lo = DAG.getNode(ISD::VP_AND, DL, VT, Lo, DAG.getConstant(Imm, DL, VT),
1517-
Mask, EVL);
1514+
Lo = DAG.getVPZeroExtendInReg(Lo, Mask, EVL, DL, OldVT);
15181515
SDValue Res = DAG.getNode(ISD::VP_OR, DL, VT, Hi, Lo, Mask, EVL);
15191516
Res = DAG.getNode(IsFSHR ? ISD::VP_LSHR : ISD::VP_SHL, DL, VT, Res, Amt,
15201517
Mask, EVL);
@@ -2377,10 +2374,8 @@ SDValue DAGTypeLegalizer::PromoteIntOp_VP_ZERO_EXTEND(SDNode *N) {
23772374
// FIXME: There is no VP_ANY_EXTEND yet.
23782375
Op = DAG.getNode(ISD::VP_ZERO_EXTEND, dl, VT, Op, N->getOperand(1),
23792376
N->getOperand(2));
2380-
APInt Imm = APInt::getLowBitsSet(VT.getScalarSizeInBits(),
2381-
N->getOperand(0).getScalarValueSizeInBits());
2382-
return DAG.getNode(ISD::VP_AND, dl, VT, Op, DAG.getConstant(Imm, dl, VT),
2383-
N->getOperand(1), N->getOperand(2));
2377+
return DAG.getVPZeroExtendInReg(Op, N->getOperand(1), N->getOperand(2), dl,
2378+
N->getOperand(0).getValueType());
23842379
}
23852380

23862381
SDValue DAGTypeLegalizer::PromoteIntOp_FIX(SDNode *N) {

llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1540,6 +1540,25 @@ SDValue SelectionDAG::getZeroExtendInReg(SDValue Op, const SDLoc &DL, EVT VT) {
15401540
return getNode(ISD::AND, DL, OpVT, Op, getConstant(Imm, DL, OpVT));
15411541
}
15421542

1543+
SDValue SelectionDAG::getVPZeroExtendInReg(SDValue Op, SDValue Mask,
1544+
SDValue EVL, const SDLoc &DL,
1545+
EVT VT) {
1546+
EVT OpVT = Op.getValueType();
1547+
assert(VT.isInteger() && OpVT.isInteger() &&
1548+
"Cannot getVPZeroExtendInReg FP types");
1549+
assert(VT.isVector() && OpVT.isVector() &&
1550+
"getVPZeroExtendInReg type and operand type should be vector!");
1551+
assert(VT.getVectorElementCount() == OpVT.getVectorElementCount() &&
1552+
"Vector element counts must match in getZeroExtendInReg");
1553+
assert(VT.bitsLE(OpVT) && "Not extending!");
1554+
if (OpVT == VT)
1555+
return Op;
1556+
APInt Imm = APInt::getLowBitsSet(OpVT.getScalarSizeInBits(),
1557+
VT.getScalarSizeInBits());
1558+
return getNode(ISD::VP_AND, DL, OpVT, Op, getConstant(Imm, DL, OpVT), Mask,
1559+
EVL);
1560+
}
1561+
15431562
SDValue SelectionDAG::getPtrExtOrTrunc(SDValue Op, const SDLoc &DL, EVT VT) {
15441563
// Only unsigned pointer semantics are supported right now. In the future this
15451564
// might delegate to TLI to check pointer signedness.

0 commit comments

Comments
 (0)