Commit 4b04e117 authored by Simon Pilgrim's avatar Simon Pilgrim
Browse files

[DAGCombiner] Sub/SUBSAT - use general SelectionDAG::FoldConstantArithmetic

This handles all the constant splat / opaque testing for us.
parent 48bd6a09
Loading
Loading
Loading
Loading
+7 −10
Original line number Diff line number Diff line
@@ -2976,11 +2976,10 @@ SDValue DAGCombiner::visitSUB(SDNode *N) {
  // FIXME: Refactor this and xor and other similar operations together.
  if (N0 == N1)
    return tryFoldToZero(DL, TLI, VT, DAG, LegalOperations);
  if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
      DAG.isConstantIntBuildVectorOrConstantInt(N1)) {
    // fold (sub c1, c2) -> c1-c2
    return DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, {N0, N1});
  }
  // fold (sub c1, c2) -> c3
  if (SDValue C = DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, {N0, N1}))
    return C;
  if (SDValue NewSel = foldBinOpIntoSelect(N))
    return NewSel;
@@ -3300,11 +3299,9 @@ SDValue DAGCombiner::visitSUBSAT(SDNode *N) {
  if (N0 == N1)
    return DAG.getConstant(0, DL, VT);
  if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
      DAG.isConstantIntBuildVectorOrConstantInt(N1)) {
  // fold (sub_sat c1, c2) -> c3
    return DAG.FoldConstantArithmetic(N->getOpcode(), DL, VT, {N0, N1});
  }
  if (SDValue C = DAG.FoldConstantArithmetic(N->getOpcode(), DL, VT, {N0, N1}))
    return C;
  // fold (sub_sat x, 0) -> x
  if (isNullConstant(N1))