diff options
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 02d44cd..d420edc 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -4705,14 +4705,18 @@ unsigned SelectionDAG::ComputeNumSignBits(SDValue Op, const APInt &DemandedElts, return 1; // Early out. Tmp2 = ComputeNumSignBits(Op.getOperand(1), DemandedElts, Depth + 1); return std::min(Tmp, Tmp2); + case ISD::SSUBO_CARRY: + case ISD::USUBO_CARRY: + // sub_carry(x,x,c) -> 0/-1 (sext carry) + if (Op.getResNo() == 0 && Op.getOperand(0) == Op.getOperand(1)) + return VTBits; + [[fallthrough]]; case ISD::SADDO: case ISD::UADDO: case ISD::SADDO_CARRY: case ISD::UADDO_CARRY: case ISD::SSUBO: case ISD::USUBO: - case ISD::SSUBO_CARRY: - case ISD::USUBO_CARRY: case ISD::SMULO: case ISD::UMULO: if (Op.getResNo() != 1) |