reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

lib/CodeGen/SelectionDAG/TargetLowering.cpp
 6889   assert(VT == RHS.getValueType() && "Expected operands to be the same type");
 6890   assert(VT.isInteger() && "Expected operands to be integers");
 6893   if (Opcode == ISD::USUBSAT && isOperationLegalOrCustom(ISD::UMAX, VT)) {
 6894     SDValue Max = DAG.getNode(ISD::UMAX, dl, VT, LHS, RHS);
 6895     return DAG.getNode(ISD::SUB, dl, VT, Max, RHS);
 6898   if (Opcode == ISD::UADDSAT && isOperationLegalOrCustom(ISD::UMIN, VT)) {
 6899     SDValue InvRHS = DAG.getNOT(dl, RHS, VT);
 6900     SDValue Min = DAG.getNode(ISD::UMIN, dl, VT, LHS, InvRHS);
 6901     return DAG.getNode(ISD::ADD, dl, VT, Min, RHS);
 6924   EVT BoolVT = getSetCCResultType(DAG.getDataLayout(), *DAG.getContext(), VT);
 6925   SDValue Result = DAG.getNode(OverflowOp, dl, DAG.getVTList(VT, BoolVT),
 6929   SDValue Zero = DAG.getConstant(0, dl, VT);
 6930   SDValue AllOnes = DAG.getAllOnesConstant(dl, VT);
 6933     if (getBooleanContents(VT) == ZeroOrNegativeOneBooleanContent) {
 6935       SDValue OverflowMask = DAG.getSExtOrTrunc(Overflow, dl, VT);
 6936       return DAG.getNode(ISD::OR, dl, VT, SumDiff, OverflowMask);
 6939     return DAG.getSelect(dl, VT, Overflow, AllOnes, SumDiff);
 6941     if (getBooleanContents(VT) == ZeroOrNegativeOneBooleanContent) {
 6943       SDValue OverflowMask = DAG.getSExtOrTrunc(Overflow, dl, VT);
 6944       SDValue Not = DAG.getNOT(dl, OverflowMask, VT);
 6945       return DAG.getNode(ISD::AND, dl, VT, SumDiff, Not);
 6948     return DAG.getSelect(dl, VT, Overflow, Zero, SumDiff);
 6954     SDValue SatMin = DAG.getConstant(MinVal, dl, VT);
 6955     SDValue SatMax = DAG.getConstant(MaxVal, dl, VT);
 6957     Result = DAG.getSelect(dl, VT, SumNeg, SatMax, SatMin);
 6958     return DAG.getSelect(dl, VT, Overflow, Result, SumDiff);