Lines Matching refs:LHS
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()
35 APInt LHSKnownUnion = LHS.Zero | LHS.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()
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()
123 return LHS; in umax()
124 if (RHS.getMinValue().uge(LHS.getMaxValue())) 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
168 unsigned BitWidth = LHS.getBitWidth(); in shl()
174 Known = LHS; in shl()
183 unsigned MinTrailingZeros = LHS.countMinTrailingZeros(); in shl()
195 if (MaxShiftAmount.ult(BitWidth) && !LHS.isUnknown()) { in shl()
209 SpecificShift.Zero = LHS.Zero << ShiftAmt; in shl()
210 SpecificShift.One = LHS.One << ShiftAmt; in shl()
221 KnownBits KnownBits::lshr(const KnownBits &LHS, const KnownBits &RHS) { in lshr() argument
222 unsigned BitWidth = LHS.getBitWidth(); in lshr()
227 Known = LHS; in lshr()
236 unsigned MinLeadingZeros = LHS.countMinLeadingZeros(); in lshr()
248 if (MaxShiftAmount.ult(BitWidth) && !LHS.isUnknown()) { in lshr()
261 KnownBits SpecificShift = LHS; in lshr()
274 KnownBits KnownBits::ashr(const KnownBits &LHS, const KnownBits &RHS) { in ashr() argument
275 unsigned BitWidth = LHS.getBitWidth(); in ashr()
280 Known = LHS; in ashr()
287 unsigned MinLeadingZeros = LHS.countMinLeadingZeros(); in ashr()
288 unsigned MinLeadingOnes = LHS.countMinLeadingOnes(); in ashr()
306 if (MaxShiftAmount.ult(BitWidth) && !LHS.isUnknown()) { in ashr()
319 KnownBits SpecificShift = LHS; 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
417 unsigned BitWidth = LHS.getBitWidth(); in mul()
418 assert(BitWidth == RHS.getBitWidth() && !LHS.hasConflict() && in mul()
420 assert((!NoUndefSelfMultiply || LHS == RHS) && in mul()
428 APInt UMaxLHS = LHS.getMaxValue(); in mul()
479 const APInt &Bottom0 = LHS.One; in mul()
484 unsigned TrailBitsKnown0 = (LHS.Zero | LHS.One).countTrailingOnes(); in mul()
486 unsigned TrailZero0 = LHS.countMinTrailingZeros(); in mul()
513 KnownBits KnownBits::mulhs(const KnownBits &LHS, const KnownBits &RHS) { in mulhs() argument
514 unsigned BitWidth = LHS.getBitWidth(); in mulhs()
515 assert(BitWidth == RHS.getBitWidth() && !LHS.hasConflict() && in mulhs()
517 KnownBits WideLHS = LHS.sext(2 * BitWidth); in mulhs()
522 KnownBits KnownBits::mulhu(const KnownBits &LHS, const KnownBits &RHS) { in mulhu() argument
523 unsigned BitWidth = LHS.getBitWidth(); in mulhu()
524 assert(BitWidth == RHS.getBitWidth() && !LHS.hasConflict() && in mulhu()
526 KnownBits WideLHS = LHS.zext(2 * BitWidth); in mulhu()
531 KnownBits KnownBits::udiv(const KnownBits &LHS, const KnownBits &RHS) { in udiv() argument
532 unsigned BitWidth = LHS.getBitWidth(); in udiv()
533 assert(!LHS.hasConflict() && !RHS.hasConflict()); in udiv()
539 unsigned LeadZ = LHS.countMinLeadingZeros(); in udiv()
549 KnownBits KnownBits::urem(const KnownBits &LHS, const KnownBits &RHS) { in urem() argument
550 unsigned BitWidth = LHS.getBitWidth(); in urem()
551 assert(!LHS.hasConflict() && !RHS.hasConflict()); in urem()
557 Known.Zero = LHS.Zero | ~LowBits; in urem()
558 Known.One = LHS.One & LowBits; in urem()
565 std::max(LHS.countMinLeadingZeros(), RHS.countMinLeadingZeros()); in urem()
570 KnownBits KnownBits::srem(const KnownBits &LHS, const KnownBits &RHS) { in srem() argument
571 unsigned BitWidth = LHS.getBitWidth(); in srem()
572 assert(!LHS.hasConflict() && !RHS.hasConflict()); in srem()
578 Known.Zero = LHS.Zero & LowBits; in srem()
579 Known.One = LHS.One & LowBits; in srem()
583 if (LHS.isNonNegative() || LowBits.isSubsetOf(LHS.Zero)) in srem()
588 if (LHS.isNegative() && LowBits.intersects(LHS.One)) in srem()
597 Known.Zero.setHighBits(LHS.countMinLeadingZeros()); in srem()