Lines Matching refs:RHS

22     const KnownBits &LHS, const KnownBits &RHS,  in computeForAddCarry()  argument
27 APInt PossibleSumZero = LHS.getMaxValue() + RHS.getMaxValue() + !CarryZero; in computeForAddCarry()
28 APInt PossibleSumOne = LHS.getMinValue() + RHS.getMinValue() + CarryOne; in computeForAddCarry()
31 APInt CarryKnownZero = ~(PossibleSumZero ^ LHS.Zero ^ RHS.Zero); in computeForAddCarry()
32 APInt CarryKnownOne = PossibleSumOne ^ LHS.One ^ RHS.One; in computeForAddCarry()
36 APInt RHSKnownUnion = RHS.Zero | RHS.One; in computeForAddCarry()
51 const KnownBits &LHS, const KnownBits &RHS, const KnownBits &Carry) { in computeForAddCarry() argument
54 LHS, RHS, Carry.Zero.getBoolValue(), Carry.One.getBoolValue()); in computeForAddCarry()
58 const KnownBits &LHS, KnownBits RHS) { in computeForAddSub() argument
63 LHS, RHS, /*CarryZero*/true, /*CarryOne*/false); in computeForAddSub()
66 std::swap(RHS.Zero, RHS.One); in computeForAddSub()
68 LHS, RHS, /*CarryZero*/false, /*CarryOne*/true); in computeForAddSub()
76 if (LHS.isNonNegative() && RHS.isNonNegative()) in computeForAddSub()
80 else if (LHS.isNegative() && RHS.isNegative()) in computeForAddSub()
117 KnownBits KnownBits::umax(const KnownBits &LHS, const KnownBits &RHS) { in umax() argument
122 if (LHS.getMinValue().uge(RHS.getMaxValue())) in umax()
124 if (RHS.getMinValue().uge(LHS.getMaxValue())) in umax()
125 return RHS; in umax()
130 KnownBits L = LHS.makeGE(RHS.getMinValue()); in umax()
131 KnownBits R = RHS.makeGE(LHS.getMinValue()); in umax()
135 KnownBits KnownBits::umin(const KnownBits &LHS, const KnownBits &RHS) { in umin() argument
138 return Flip(umax(Flip(LHS), Flip(RHS))); in umin()
141 KnownBits KnownBits::smax(const KnownBits &LHS, const KnownBits &RHS) { in smax() argument
151 return Flip(umax(Flip(LHS), Flip(RHS))); in smax()
154 KnownBits KnownBits::smin(const KnownBits &LHS, const KnownBits &RHS) { in smin() argument
164 return Flip(umax(Flip(LHS), Flip(RHS))); in smin()
167 KnownBits KnownBits::shl(const KnownBits &LHS, const KnownBits &RHS) { in shl() argument
172 if (RHS.isConstant() && RHS.getConstant().ult(BitWidth)) { in shl()
173 unsigned Shift = RHS.getConstant().getZExtValue(); in shl()
186 APInt MinShiftAmount = RHS.getMinValue(); in shl()
194 APInt MaxShiftAmount = RHS.getMaxValue(); in shl()
196 uint64_t ShiftAmtZeroMask = (~RHS.Zero).getZExtValue(); in shl()
197 uint64_t ShiftAmtOneMask = RHS.One.getZExtValue(); in shl()
221 KnownBits KnownBits::lshr(const KnownBits &LHS, const KnownBits &RHS) { in lshr() argument
225 if (RHS.isConstant() && RHS.getConstant().ult(BitWidth)) { in lshr()
226 unsigned Shift = RHS.getConstant().getZExtValue(); in lshr()
239 APInt MinShiftAmount = RHS.getMinValue(); in lshr()
247 APInt MaxShiftAmount = RHS.getMaxValue(); in lshr()
249 uint64_t ShiftAmtZeroMask = (~RHS.Zero).getZExtValue(); in lshr()
250 uint64_t ShiftAmtOneMask = RHS.One.getZExtValue(); in lshr()
274 KnownBits KnownBits::ashr(const KnownBits &LHS, const KnownBits &RHS) { in ashr() argument
278 if (RHS.isConstant() && RHS.getConstant().ult(BitWidth)) { in ashr()
279 unsigned Shift = RHS.getConstant().getZExtValue(); in ashr()
291 APInt MinShiftAmount = RHS.getMinValue(); in ashr()
305 APInt MaxShiftAmount = RHS.getMaxValue(); in ashr()
307 uint64_t ShiftAmtZeroMask = (~RHS.Zero).getZExtValue(); in ashr()
308 uint64_t ShiftAmtOneMask = RHS.One.getZExtValue(); in ashr()
333 Optional<bool> KnownBits::eq(const KnownBits &LHS, const KnownBits &RHS) { in eq() argument
334 if (LHS.isConstant() && RHS.isConstant()) in eq()
335 return Optional<bool>(LHS.getConstant() == RHS.getConstant()); in eq()
336 if (LHS.One.intersects(RHS.Zero) || RHS.One.intersects(LHS.Zero)) in eq()
341 Optional<bool> KnownBits::ne(const KnownBits &LHS, const KnownBits &RHS) { in ne() argument
342 if (Optional<bool> KnownEQ = eq(LHS, RHS)) in ne()
347 Optional<bool> KnownBits::ugt(const KnownBits &LHS, const KnownBits &RHS) { in ugt() argument
349 if (LHS.getMaxValue().ule(RHS.getMinValue())) in ugt()
352 if (LHS.getMinValue().ugt(RHS.getMaxValue())) in ugt()
357 Optional<bool> KnownBits::uge(const KnownBits &LHS, const KnownBits &RHS) { in uge() argument
358 if (Optional<bool> IsUGT = ugt(RHS, LHS)) in uge()
363 Optional<bool> KnownBits::ult(const KnownBits &LHS, const KnownBits &RHS) { in ult() argument
364 return ugt(RHS, LHS); in ult()
367 Optional<bool> KnownBits::ule(const KnownBits &LHS, const KnownBits &RHS) { in ule() argument
368 return uge(RHS, LHS); in ule()
371 Optional<bool> KnownBits::sgt(const KnownBits &LHS, const KnownBits &RHS) { in sgt() argument
373 if (LHS.getSignedMaxValue().sle(RHS.getSignedMinValue())) in sgt()
376 if (LHS.getSignedMinValue().sgt(RHS.getSignedMaxValue())) in sgt()
381 Optional<bool> KnownBits::sge(const KnownBits &LHS, const KnownBits &RHS) { in sge() argument
382 if (Optional<bool> KnownSGT = sgt(RHS, LHS)) in sge()
387 Optional<bool> KnownBits::slt(const KnownBits &LHS, const KnownBits &RHS) { in slt() argument
388 return sgt(RHS, LHS); in slt()
391 Optional<bool> KnownBits::sle(const KnownBits &LHS, const KnownBits &RHS) { in sle() argument
392 return sge(RHS, LHS); in sle()
415 KnownBits KnownBits::mul(const KnownBits &LHS, const KnownBits &RHS, in mul() argument
418 assert(BitWidth == RHS.getBitWidth() && !LHS.hasConflict() && in mul()
419 !RHS.hasConflict() && "Operand mismatch"); in mul()
420 assert((!NoUndefSelfMultiply || LHS == RHS) && in mul()
429 APInt UMaxRHS = RHS.getMaxValue(); in mul()
480 const APInt &Bottom1 = RHS.One; in mul()
485 unsigned TrailBitsKnown1 = (RHS.Zero | RHS.One).countTrailingOnes(); in mul()
487 unsigned TrailZero1 = RHS.countMinTrailingZeros(); in mul()
513 KnownBits KnownBits::mulhs(const KnownBits &LHS, const KnownBits &RHS) { in mulhs() argument
515 assert(BitWidth == RHS.getBitWidth() && !LHS.hasConflict() && in mulhs()
516 !RHS.hasConflict() && "Operand mismatch"); in mulhs()
518 KnownBits WideRHS = RHS.sext(2 * BitWidth); in mulhs()
522 KnownBits KnownBits::mulhu(const KnownBits &LHS, const KnownBits &RHS) { in mulhu() argument
524 assert(BitWidth == RHS.getBitWidth() && !LHS.hasConflict() && in mulhu()
525 !RHS.hasConflict() && "Operand mismatch"); in mulhu()
527 KnownBits WideRHS = RHS.zext(2 * BitWidth); in mulhu()
531 KnownBits KnownBits::udiv(const KnownBits &LHS, const KnownBits &RHS) { in udiv() argument
533 assert(!LHS.hasConflict() && !RHS.hasConflict()); in udiv()
540 unsigned RHSMaxLeadingZeros = RHS.countMaxLeadingZeros(); in udiv()
549 KnownBits KnownBits::urem(const KnownBits &LHS, const KnownBits &RHS) { in urem() argument
551 assert(!LHS.hasConflict() && !RHS.hasConflict()); in urem()
554 if (RHS.isConstant() && RHS.getConstant().isPowerOf2()) { in urem()
556 APInt LowBits = RHS.getConstant() - 1; in urem()
565 std::max(LHS.countMinLeadingZeros(), RHS.countMinLeadingZeros()); in urem()
570 KnownBits KnownBits::srem(const KnownBits &LHS, const KnownBits &RHS) { in srem() argument
572 assert(!LHS.hasConflict() && !RHS.hasConflict()); in srem()
575 if (RHS.isConstant() && RHS.getConstant().isPowerOf2()) { in srem()
577 APInt LowBits = RHS.getConstant() - 1; in srem()
601 KnownBits &KnownBits::operator&=(const KnownBits &RHS) { in operator &=() argument
603 Zero |= RHS.Zero; in operator &=()
605 One &= RHS.One; in operator &=()
609 KnownBits &KnownBits::operator|=(const KnownBits &RHS) { in operator |=() argument
611 Zero &= RHS.Zero; in operator |=()
613 One |= RHS.One; in operator |=()
617 KnownBits &KnownBits::operator^=(const KnownBits &RHS) { in operator ^=() argument
619 APInt Z = (Zero & RHS.Zero) | (One & RHS.One); in operator ^=()
621 One = (Zero & RHS.One) | (One & RHS.Zero); in operator ^=()