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

References

lib/CodeGen/SelectionDAG/DAGCombiner.cpp
 2856   EVT VT = N0.getValueType();
 2866       return N0;
 2871   if (N0 == N1)
 2873   if (DAG.isConstantIntBuildVectorOrConstantInt(N0) &&
 2876     return DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, N0.getNode(),
 2887     return DAG.getNode(ISD::ADD, DL, VT, N0,
 2891   if (isNullOrNullSplat(N0)) {
 2908       return N0;
 2914         return N0;
 2922   if (isAllOnesOrAllOnesSplat(N0))
 2923     return DAG.getNode(ISD::XOR, DL, VT, N1, N0);
 2927     return DAG.getNode(ISD::ADD, DL, VT, N0, N1.getOperand(1));
 2930   if (N1.getOpcode() == ISD::SUB && N0 == N1.getOperand(0))
 2934   if (N0.getOpcode() == ISD::ADD && N0.getOperand(0) == N1)
 2934   if (N0.getOpcode() == ISD::ADD && N0.getOperand(0) == N1)
 2935     return N0.getOperand(1);
 2938   if (N0.getOpcode() == ISD::ADD && N0.getOperand(1) == N1)
 2938   if (N0.getOpcode() == ISD::ADD && N0.getOperand(1) == N1)
 2939     return N0.getOperand(0);
 2942   if (N0.getOpcode() == ISD::ADD &&
 2944       isConstantOrConstantVector(N0.getOperand(1), /* NoOpaques */ true)) {
 2946         ISD::SUB, DL, VT, N0.getOperand(1).getNode(), N1.getNode());
 2948     return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0), NewC);
 2954     if (isConstantOrConstantVector(N0, /* NoOpaques */ true) &&
 2956       SDValue NewC = DAG.FoldConstantArithmetic(ISD::SUB, DL, VT, N0.getNode(),
 2964   if (N0.getOpcode() == ISD::SUB &&
 2966       isConstantOrConstantVector(N0.getOperand(1), /* NoOpaques */ true)) {
 2968         ISD::ADD, DL, VT, N0.getOperand(1).getNode(), N1.getNode());
 2970     return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), NewC);
 2974   if (N0.getOpcode() == ISD::SUB &&
 2976       isConstantOrConstantVector(N0.getOperand(0), /* NoOpaques */ true)) {
 2978         ISD::SUB, DL, VT, N0.getOperand(0).getNode(), N1.getNode());
 2980     return DAG.getNode(ISD::SUB, DL, VT, NewC, N0.getOperand(1));
 2984   if (N0.getOpcode() == ISD::ADD &&
 2985       (N0.getOperand(1).getOpcode() == ISD::SUB ||
 2986        N0.getOperand(1).getOpcode() == ISD::ADD) &&
 2987       N0.getOperand(1).getOperand(0) == N1)
 2988     return DAG.getNode(N0.getOperand(1).getOpcode(), DL, VT, N0.getOperand(0),
 2988     return DAG.getNode(N0.getOperand(1).getOpcode(), DL, VT, N0.getOperand(0),
 2989                        N0.getOperand(1).getOperand(1));
 2992   if (N0.getOpcode() == ISD::ADD && N0.getOperand(1).getOpcode() == ISD::ADD &&
 2992   if (N0.getOpcode() == ISD::ADD && N0.getOperand(1).getOpcode() == ISD::ADD &&
 2993       N0.getOperand(1).getOperand(1) == N1)
 2994     return DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(0),
 2995                        N0.getOperand(1).getOperand(0));
 2998   if (N0.getOpcode() == ISD::SUB && N0.getOperand(1).getOpcode() == ISD::SUB &&
 2998   if (N0.getOpcode() == ISD::SUB && N0.getOperand(1).getOpcode() == ISD::SUB &&
 2999       N0.getOperand(1).getOperand(1) == N1)
 3000     return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0),
 3001                        N0.getOperand(1).getOperand(0));
 3005     return DAG.getNode(ISD::ADD, DL, VT, N0,
 3016       return DAG.getNode(ISD::ADD, DL, VT, N0, Mul);
 3023       return DAG.getNode(ISD::ADD, DL, VT, N0, Mul);
 3028   if (N0.isUndef())
 3029     return N0;
 3039   if (SDValue V = foldAddSubMasked1(false, N0, N1, DAG, SDLoc(N)))
 3043   if (N0.hasOneUse() && N0.getOpcode() == ISD::SUB && isOneOrOneSplat(N1)) {
 3043   if (N0.hasOneUse() && N0.getOpcode() == ISD::SUB && isOneOrOneSplat(N1)) {
 3044     SDValue Xor = DAG.getNode(ISD::XOR, DL, VT, N0.getOperand(1),
 3046     return DAG.getNode(ISD::ADD, DL, VT, Xor, N0.getOperand(0));
 3054     SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0, N1.getOperand(0));
 3060   if (N0.hasOneUse() && N0.getOpcode() == ISD::ADD &&
 3060   if (N0.hasOneUse() && N0.getOpcode() == ISD::ADD &&
 3061       isConstantOrConstantVector(N0.getOperand(1), /*NoOpaques=*/true)) {
 3062     SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), N1);
 3063     return DAG.getNode(ISD::ADD, DL, VT, Sub, N0.getOperand(1));
 3068     SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0, N1.getOperand(0));
 3073   if (N0.hasOneUse() && N0.getOpcode() == ISD::SUB &&
 3073   if (N0.hasOneUse() && N0.getOpcode() == ISD::SUB &&
 3074       isConstantOrConstantVector(N0.getOperand(1), /*NoOpaques=*/true)) {
 3075     SDValue Sub = DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), N1);
 3076     return DAG.getNode(ISD::SUB, DL, VT, Sub, N0.getOperand(1));
 3079   if (N0.hasOneUse() && N0.getOpcode() == ISD::SUB &&
 3079   if (N0.hasOneUse() && N0.getOpcode() == ISD::SUB &&
 3080       isConstantOrConstantVector(N0.getOperand(0), /*NoOpaques=*/true)) {
 3081     SDValue Add = DAG.getNode(ISD::ADD, DL, VT, N0.getOperand(1), N1);
 3082     return DAG.getNode(ISD::SUB, DL, VT, N0.getOperand(0), Add);
 3093     return DAG.getNode(ISD::ADD, DL, VT, N0, SExt);
 3098     if (N0.getOpcode() == ISD::XOR && N1.getOpcode() == ISD::SRA) {
 3099       SDValue X0 = N0.getOperand(0), X1 = N0.getOperand(1);
 3099       SDValue X0 = N0.getOperand(0), X1 = N0.getOperand(1);
 3111   if (GlobalAddressSDNode *GA = dyn_cast<GlobalAddressSDNode>(N0))
 3131       return DAG.getNode(ISD::ADD, DL, VT, N0, ZExt);
 3143       return DAG.getNode(ISD::ADD, DL, VT, N0, SRA);
 3149     if (SDValue Carry = getAsCarry(TLI, N0)) {