Skip to content

Commit 5885eec

Browse files
committed
Revert "[CodeGen][X86] Expand USUBSAT to UMAX+SUB, also for vectors"
This reverts commit r351125. I missed test changes in an SLPVectorizer test, due to the cost model changes. Reverting for now. llvm-svn: 351129
1 parent 46f0a97 commit 5885eec

File tree

6 files changed

+1651
-778
lines changed

6 files changed

+1651
-778
lines changed

llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ class VectorLegalizer {
141141
SDValue ExpandFunnelShift(SDValue Op);
142142
SDValue ExpandROT(SDValue Op);
143143
SDValue ExpandFMINNUM_FMAXNUM(SDValue Op);
144-
SDValue ExpandAddSubSat(SDValue Op);
145144
SDValue ExpandStrictFPOp(SDValue Op);
146145

147146
/// Implements vector promotion.
@@ -778,11 +777,6 @@ SDValue VectorLegalizer::Expand(SDValue Op) {
778777
case ISD::FMINNUM:
779778
case ISD::FMAXNUM:
780779
return ExpandFMINNUM_FMAXNUM(Op);
781-
case ISD::USUBSAT:
782-
case ISD::SSUBSAT:
783-
case ISD::UADDSAT:
784-
case ISD::SADDSAT:
785-
return ExpandAddSubSat(Op);
786780
case ISD::STRICT_FADD:
787781
case ISD::STRICT_FSUB:
788782
case ISD::STRICT_FMUL:
@@ -1212,12 +1206,6 @@ SDValue VectorLegalizer::ExpandFMINNUM_FMAXNUM(SDValue Op) {
12121206
return DAG.UnrollVectorOp(Op.getNode());
12131207
}
12141208

1215-
SDValue VectorLegalizer::ExpandAddSubSat(SDValue Op) {
1216-
if (SDValue Expanded = TLI.expandAddSubSat(Op.getNode(), DAG))
1217-
return Expanded;
1218-
return DAG.UnrollVectorOp(Op.getNode());
1219-
}
1220-
12211209
SDValue VectorLegalizer::ExpandStrictFPOp(SDValue Op) {
12221210
EVT VT = Op.getValueType();
12231211
EVT EltVT = VT.getVectorElementType();

llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5277,22 +5277,6 @@ SDValue TargetLowering::lowerCmpEqZeroToCtlzSrl(SDValue Op,
52775277

52785278
SDValue TargetLowering::expandAddSubSat(SDNode *Node, SelectionDAG &DAG) const {
52795279
unsigned Opcode = Node->getOpcode();
5280-
SDValue LHS = Node->getOperand(0);
5281-
SDValue RHS = Node->getOperand(1);
5282-
EVT VT = LHS.getValueType();
5283-
SDLoc dl(Node);
5284-
5285-
// usub.sat(a, b) -> umax(a, b) - b
5286-
if (Opcode == ISD::USUBSAT && isOperationLegalOrCustom(ISD::UMAX, VT)) {
5287-
SDValue Max = DAG.getNode(ISD::UMAX, dl, VT, LHS, RHS);
5288-
return DAG.getNode(ISD::SUB, dl, VT, Max, RHS);
5289-
}
5290-
5291-
if (VT.isVector()) {
5292-
// TODO: Consider not scalarizing here.
5293-
return SDValue();
5294-
}
5295-
52965280
unsigned OverflowOp;
52975281
switch (Opcode) {
52985282
case ISD::SADDSAT:
@@ -5311,7 +5295,11 @@ SDValue TargetLowering::expandAddSubSat(SDNode *Node, SelectionDAG &DAG) const {
53115295
llvm_unreachable("Expected method to receive signed or unsigned saturation "
53125296
"addition or subtraction node.");
53135297
}
5298+
assert(Node->getNumOperands() == 2 && "Expected node to have 2 operands.");
53145299

5300+
SDLoc dl(Node);
5301+
SDValue LHS = Node->getOperand(0);
5302+
SDValue RHS = Node->getOperand(1);
53155303
assert(LHS.getValueType().isScalarInteger() &&
53165304
"Expected operands to be integers. Vector of int arguments should "
53175305
"already be unrolled.");

llvm/lib/Target/X86/X86TargetTransformInfo.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1780,10 +1780,6 @@ int X86TTIImpl::getIntrinsicInstrCost(Intrinsic::ID IID, Type *RetTy,
17801780
{ ISD::CTPOP, MVT::v16i32, 24 },
17811781
{ ISD::CTTZ, MVT::v8i64, 20 },
17821782
{ ISD::CTTZ, MVT::v16i32, 28 },
1783-
{ ISD::USUBSAT, MVT::v16i32, 2 }, // pmaxud + psubd
1784-
{ ISD::USUBSAT, MVT::v2i64, 2 }, // pmaxuq + psubq
1785-
{ ISD::USUBSAT, MVT::v4i64, 2 }, // pmaxuq + psubq
1786-
{ ISD::USUBSAT, MVT::v8i64, 2 }, // pmaxuq + psubq
17871783
};
17881784
static const CostTblEntry XOPCostTbl[] = {
17891785
{ ISD::BITREVERSE, MVT::v4i64, 4 },
@@ -1827,7 +1823,6 @@ int X86TTIImpl::getIntrinsicInstrCost(Intrinsic::ID IID, Type *RetTy,
18271823
{ ISD::UADDSAT, MVT::v32i8, 1 },
18281824
{ ISD::USUBSAT, MVT::v16i16, 1 },
18291825
{ ISD::USUBSAT, MVT::v32i8, 1 },
1830-
{ ISD::USUBSAT, MVT::v8i32, 2 }, // pmaxud + psubd
18311826
{ ISD::FSQRT, MVT::f32, 7 }, // Haswell from http://www.agner.org/
18321827
{ ISD::FSQRT, MVT::v4f32, 7 }, // Haswell from http://www.agner.org/
18331828
{ ISD::FSQRT, MVT::v8f32, 14 }, // Haswell from http://www.agner.org/
@@ -1863,7 +1858,6 @@ int X86TTIImpl::getIntrinsicInstrCost(Intrinsic::ID IID, Type *RetTy,
18631858
{ ISD::UADDSAT, MVT::v32i8, 4 }, // 2 x 128-bit Op + extract/insert
18641859
{ ISD::USUBSAT, MVT::v16i16, 4 }, // 2 x 128-bit Op + extract/insert
18651860
{ ISD::USUBSAT, MVT::v32i8, 4 }, // 2 x 128-bit Op + extract/insert
1866-
{ ISD::USUBSAT, MVT::v8i32, 6 }, // 2 x 128-bit Op + extract/insert
18671861
{ ISD::FSQRT, MVT::f32, 14 }, // SNB from http://www.agner.org/
18681862
{ ISD::FSQRT, MVT::v4f32, 14 }, // SNB from http://www.agner.org/
18691863
{ ISD::FSQRT, MVT::v8f32, 28 }, // SNB from http://www.agner.org/
@@ -1884,7 +1878,6 @@ int X86TTIImpl::getIntrinsicInstrCost(Intrinsic::ID IID, Type *RetTy,
18841878
{ ISD::FSQRT, MVT::v2f64, 70 }, // sqrtpd
18851879
};
18861880
static const CostTblEntry SSE42CostTbl[] = {
1887-
{ ISD::USUBSAT, MVT::v4i32, 2 }, // pmaxud + psubd
18881881
{ ISD::FSQRT, MVT::f32, 18 }, // Nehalem from http://www.agner.org/
18891882
{ ISD::FSQRT, MVT::v4f32, 18 }, // Nehalem from http://www.agner.org/
18901883
};

0 commit comments

Comments
 (0)