Lines Matching refs:I
42 static bool ShrinkDemandedConstant(Instruction *I, unsigned OpNo, in ShrinkDemandedConstant() argument
44 assert(I && "No instruction?"); in ShrinkDemandedConstant()
45 assert(OpNo < I->getNumOperands() && "Operand index too large"); in ShrinkDemandedConstant()
48 Value *Op = I->getOperand(OpNo); in ShrinkDemandedConstant()
58 I->setOperand(OpNo, ConstantInt::get(Op->getType(), *C & Demanded)); in ShrinkDemandedConstant()
95 bool InstCombinerImpl::SimplifyDemandedBits(Instruction *I, unsigned OpNo, in SimplifyDemandedBits() argument
100 Use &U = I->getOperandUse(OpNo); in SimplifyDemandedBits()
164 Value *InstCombinerImpl::SimplifyDemandedUseBits(Instruction *I, in SimplifyDemandedUseBits() argument
169 assert(I != nullptr && "Null pointer of Value???"); in SimplifyDemandedUseBits()
172 Type *VTy = I->getType(); in SimplifyDemandedUseBits()
182 auto disableWrapFlagsBasedOnUnusedHighBits = [](Instruction *I, in SimplifyDemandedUseBits()
188 I->setHasNoSignedWrap(false); in SimplifyDemandedUseBits()
189 I->setHasNoUnsignedWrap(false); in SimplifyDemandedUseBits()
191 return I; in SimplifyDemandedUseBits()
201 if (ShrinkDemandedConstant(I, 0, DemandedFromOps) || in SimplifyDemandedUseBits()
202 SimplifyDemandedBits(I, 0, DemandedFromOps, LHSKnown, Q, Depth + 1) || in SimplifyDemandedUseBits()
203 ShrinkDemandedConstant(I, 1, DemandedFromOps) || in SimplifyDemandedUseBits()
204 SimplifyDemandedBits(I, 1, DemandedFromOps, RHSKnown, Q, Depth + 1)) { in SimplifyDemandedUseBits()
205 disableWrapFlagsBasedOnUnusedHighBits(I, NLZ); in SimplifyDemandedUseBits()
211 switch (I->getOpcode()) { in SimplifyDemandedUseBits()
213 llvm::computeKnownBits(I, Known, Q, Depth); in SimplifyDemandedUseBits()
217 if (SimplifyDemandedBits(I, 1, DemandedMask, RHSKnown, Q, Depth + 1) || in SimplifyDemandedUseBits()
218 SimplifyDemandedBits(I, 0, DemandedMask & ~RHSKnown.Zero, LHSKnown, Q, in SimplifyDemandedUseBits()
220 return I; in SimplifyDemandedUseBits()
222 Known = analyzeKnownBitsFromAndXorOr(cast<Operator>(I), LHSKnown, RHSKnown, in SimplifyDemandedUseBits()
233 return I->getOperand(0); in SimplifyDemandedUseBits()
235 return I->getOperand(1); in SimplifyDemandedUseBits()
238 if (ShrinkDemandedConstant(I, 1, DemandedMask & ~LHSKnown.Zero)) in SimplifyDemandedUseBits()
239 return I; in SimplifyDemandedUseBits()
245 if (SimplifyDemandedBits(I, 1, DemandedMask, RHSKnown, Q, Depth + 1) || in SimplifyDemandedUseBits()
246 SimplifyDemandedBits(I, 0, DemandedMask & ~RHSKnown.One, LHSKnown, Q, in SimplifyDemandedUseBits()
249 I->dropPoisonGeneratingFlags(); in SimplifyDemandedUseBits()
250 return I; in SimplifyDemandedUseBits()
253 Known = analyzeKnownBitsFromAndXorOr(cast<Operator>(I), LHSKnown, RHSKnown, in SimplifyDemandedUseBits()
264 return I->getOperand(0); in SimplifyDemandedUseBits()
266 return I->getOperand(1); in SimplifyDemandedUseBits()
269 if (ShrinkDemandedConstant(I, 1, DemandedMask)) in SimplifyDemandedUseBits()
270 return I; in SimplifyDemandedUseBits()
273 if (!cast<PossiblyDisjointInst>(I)->isDisjoint()) { in SimplifyDemandedUseBits()
274 WithCache<const Value *> LHSCache(I->getOperand(0), LHSKnown), in SimplifyDemandedUseBits()
275 RHSCache(I->getOperand(1), RHSKnown); in SimplifyDemandedUseBits()
277 cast<PossiblyDisjointInst>(I)->setIsDisjoint(true); in SimplifyDemandedUseBits()
278 return I; in SimplifyDemandedUseBits()
285 if (SimplifyDemandedBits(I, 1, DemandedMask, RHSKnown, Q, Depth + 1) || in SimplifyDemandedUseBits()
286 SimplifyDemandedBits(I, 0, DemandedMask, LHSKnown, Q, Depth + 1)) in SimplifyDemandedUseBits()
287 return I; in SimplifyDemandedUseBits()
290 match(I->getOperand(0), m_Intrinsic<Intrinsic::ctpop>(m_Value(LHS))) && in SimplifyDemandedUseBits()
291 match(I->getOperand(1), m_Intrinsic<Intrinsic::ctpop>(m_Value(RHS)))) { in SimplifyDemandedUseBits()
294 Builder.SetInsertPoint(I); in SimplifyDemandedUseBits()
299 Known = analyzeKnownBitsFromAndXorOr(cast<Operator>(I), LHSKnown, RHSKnown, in SimplifyDemandedUseBits()
310 return I->getOperand(0); in SimplifyDemandedUseBits()
312 return I->getOperand(1); in SimplifyDemandedUseBits()
319 BinaryOperator::CreateOr(I->getOperand(0), I->getOperand(1)); in SimplifyDemandedUseBits()
322 Or->takeName(I); in SimplifyDemandedUseBits()
323 return InsertNewInstWith(Or, I->getIterator()); in SimplifyDemandedUseBits()
334 Instruction *And = BinaryOperator::CreateAnd(I->getOperand(0), AndC); in SimplifyDemandedUseBits()
335 return InsertNewInstWith(And, I->getIterator()); in SimplifyDemandedUseBits()
342 if (match(I->getOperand(1), m_APInt(C)) && !C->isAllOnes()) { in SimplifyDemandedUseBits()
345 I->setOperand(1, ConstantInt::getAllOnesValue(VTy)); in SimplifyDemandedUseBits()
346 return I; in SimplifyDemandedUseBits()
349 if (ShrinkDemandedConstant(I, 1, DemandedMask)) in SimplifyDemandedUseBits()
350 return I; in SimplifyDemandedUseBits()
357 if (Instruction *LHSInst = dyn_cast<Instruction>(I->getOperand(0))) { in SimplifyDemandedUseBits()
360 match(I->getOperand(1), m_ConstantInt(XorRHS)) && in SimplifyDemandedUseBits()
366 Instruction *NewAnd = BinaryOperator::CreateAnd(I->getOperand(0), AndC); in SimplifyDemandedUseBits()
367 InsertNewInstWith(NewAnd, I->getIterator()); in SimplifyDemandedUseBits()
371 return InsertNewInstWith(NewXor, I->getIterator()); in SimplifyDemandedUseBits()
377 if (SimplifyDemandedBits(I, 2, DemandedMask, RHSKnown, Q, Depth + 1) || in SimplifyDemandedUseBits()
378 SimplifyDemandedBits(I, 1, DemandedMask, LHSKnown, Q, Depth + 1)) in SimplifyDemandedUseBits()
379 return I; in SimplifyDemandedUseBits()
386 auto CanonicalizeSelectConstant = [](Instruction *I, unsigned OpNo, in SimplifyDemandedUseBits()
389 if (!match(I->getOperand(OpNo), m_APInt(SelC))) in SimplifyDemandedUseBits()
398 if (!match(I->getOperand(0), m_ICmp(m_Value(X), m_APInt(CmpC))) || in SimplifyDemandedUseBits()
400 return ShrinkDemandedConstant(I, OpNo, DemandedMask); in SimplifyDemandedUseBits()
408 I->setOperand(OpNo, ConstantInt::get(I->getType(), *CmpC)); in SimplifyDemandedUseBits()
411 return ShrinkDemandedConstant(I, OpNo, DemandedMask); in SimplifyDemandedUseBits()
413 if (CanonicalizeSelectConstant(I, 1, DemandedMask) || in SimplifyDemandedUseBits()
414 CanonicalizeSelectConstant(I, 2, DemandedMask)) in SimplifyDemandedUseBits()
415 return I; in SimplifyDemandedUseBits()
418 adjustKnownBitsForSelectArm(LHSKnown, I->getOperand(0), I->getOperand(1), in SimplifyDemandedUseBits()
420 adjustKnownBitsForSelectArm(RHSKnown, I->getOperand(0), I->getOperand(2), in SimplifyDemandedUseBits()
430 if (match(I->getOperand(0), m_OneUse(m_LShr(m_Value(X), m_APInt(C))))) { in SimplifyDemandedUseBits()
437 Builder.SetInsertPoint(I); in SimplifyDemandedUseBits()
445 unsigned SrcBitWidth = I->getOperand(0)->getType()->getScalarSizeInBits(); in SimplifyDemandedUseBits()
449 if (SimplifyDemandedBits(I, 0, InputDemandedMask, InputKnown, Q, in SimplifyDemandedUseBits()
453 I->dropPoisonGeneratingFlags(); in SimplifyDemandedUseBits()
454 return I; in SimplifyDemandedUseBits()
457 if (I->getOpcode() == Instruction::ZExt && I->hasNonNeg() && in SimplifyDemandedUseBits()
466 unsigned SrcBitWidth = I->getOperand(0)->getType()->getScalarSizeInBits(); in SimplifyDemandedUseBits()
476 if (SimplifyDemandedBits(I, 0, InputDemandedBits, InputKnown, Q, Depth + 1)) in SimplifyDemandedUseBits()
477 return I; in SimplifyDemandedUseBits()
484 CastInst *NewCast = new ZExtInst(I->getOperand(0), VTy); in SimplifyDemandedUseBits()
485 NewCast->takeName(I); in SimplifyDemandedUseBits()
486 return InsertNewInstWith(NewCast, I->getIterator()); in SimplifyDemandedUseBits()
499 if (match(I, m_c_Add(m_OneUse(m_ZExt(m_Value(X))), in SimplifyDemandedUseBits()
509 Builder.SetInsertPoint(I); in SimplifyDemandedUseBits()
515 if (match(I, m_Add(m_SExt(m_Value(X)), m_SExt(m_Value(Y)))) && in SimplifyDemandedUseBits()
517 (I->getOperand(0)->hasOneUse() || I->getOperand(1)->hasOneUse())) { in SimplifyDemandedUseBits()
526 Builder.SetInsertPoint(I); in SimplifyDemandedUseBits()
536 if (ShrinkDemandedConstant(I, 1, DemandedFromOps) || in SimplifyDemandedUseBits()
537 SimplifyDemandedBits(I, 1, DemandedFromOps, RHSKnown, Q, Depth + 1)) in SimplifyDemandedUseBits()
538 return disableWrapFlagsBasedOnUnusedHighBits(I, NLZ); in SimplifyDemandedUseBits()
546 if (ShrinkDemandedConstant(I, 0, DemandedFromLHS) || in SimplifyDemandedUseBits()
547 SimplifyDemandedBits(I, 0, DemandedFromLHS, LHSKnown, Q, Depth + 1)) in SimplifyDemandedUseBits()
548 return disableWrapFlagsBasedOnUnusedHighBits(I, NLZ); in SimplifyDemandedUseBits()
553 return I->getOperand(0); in SimplifyDemandedUseBits()
555 return I->getOperand(1); in SimplifyDemandedUseBits()
560 if (match(I->getOperand(1), m_APInt(C)) && in SimplifyDemandedUseBits()
563 Builder.SetInsertPoint(I); in SimplifyDemandedUseBits()
564 return Builder.CreateXor(I->getOperand(0), ConstantInt::get(VTy, *C)); in SimplifyDemandedUseBits()
569 bool NSW = cast<OverflowingBinaryOperator>(I)->hasNoSignedWrap(); in SimplifyDemandedUseBits()
570 bool NUW = cast<OverflowingBinaryOperator>(I)->hasNoUnsignedWrap(); in SimplifyDemandedUseBits()
579 if (ShrinkDemandedConstant(I, 1, DemandedFromOps) || in SimplifyDemandedUseBits()
580 SimplifyDemandedBits(I, 1, DemandedFromOps, RHSKnown, Q, Depth + 1)) in SimplifyDemandedUseBits()
581 return disableWrapFlagsBasedOnUnusedHighBits(I, NLZ); in SimplifyDemandedUseBits()
589 if (ShrinkDemandedConstant(I, 0, DemandedFromLHS) || in SimplifyDemandedUseBits()
590 SimplifyDemandedBits(I, 0, DemandedFromLHS, LHSKnown, Q, Depth + 1)) in SimplifyDemandedUseBits()
591 return disableWrapFlagsBasedOnUnusedHighBits(I, NLZ); in SimplifyDemandedUseBits()
596 return I->getOperand(0); in SimplifyDemandedUseBits()
600 return I->getOperand(1); in SimplifyDemandedUseBits()
604 if (match(I->getOperand(0), m_LowBitMask(LHSC)) && in SimplifyDemandedUseBits()
607 Builder.SetInsertPoint(I); in SimplifyDemandedUseBits()
608 return Builder.CreateNot(I->getOperand(1)); in SimplifyDemandedUseBits()
612 bool NSW = cast<OverflowingBinaryOperator>(I)->hasNoSignedWrap(); in SimplifyDemandedUseBits()
613 bool NUW = cast<OverflowingBinaryOperator>(I)->hasNoUnsignedWrap(); in SimplifyDemandedUseBits()
620 return I; in SimplifyDemandedUseBits()
628 if (match(I->getOperand(1), m_APInt(C)) && C->countr_zero() == CTZ) { in SimplifyDemandedUseBits()
630 Instruction *Shl = BinaryOperator::CreateShl(I->getOperand(0), ShiftC); in SimplifyDemandedUseBits()
631 return InsertNewInstWith(Shl, I->getIterator()); in SimplifyDemandedUseBits()
637 if (I->getOperand(0) == I->getOperand(1) && DemandedMask.ult(4)) { in SimplifyDemandedUseBits()
639 Instruction *And1 = BinaryOperator::CreateAnd(I->getOperand(0), One); in SimplifyDemandedUseBits()
640 return InsertNewInstWith(And1, I->getIterator()); in SimplifyDemandedUseBits()
643 llvm::computeKnownBits(I, Known, Q, Depth); in SimplifyDemandedUseBits()
648 if (match(I->getOperand(1), m_APInt(SA))) { in SimplifyDemandedUseBits()
650 if (match(I->getOperand(0), m_Shr(m_Value(), m_APInt(ShrAmt)))) in SimplifyDemandedUseBits()
651 if (Instruction *Shr = dyn_cast<Instruction>(I->getOperand(0))) in SimplifyDemandedUseBits()
652 if (Value *R = simplifyShrShlDemandedBits(Shr, *ShrAmt, I, *SA, in SimplifyDemandedUseBits()
657 if (I->hasOneUse()) { in SimplifyDemandedUseBits()
658 auto *Inst = dyn_cast<Instruction>(I->user_back()); in SimplifyDemandedUseBits()
664 llvm::computeKnownBits(I, Known, Q, Depth); in SimplifyDemandedUseBits()
675 if (I->hasNoSignedWrap()) { in SimplifyDemandedUseBits()
678 ComputeNumSignBits(I->getOperand(0), Q.CxtI, Depth + 1); in SimplifyDemandedUseBits()
680 return I->getOperand(0); in SimplifyDemandedUseBits()
689 if (match(I->getOperand(0), m_LShr(m_ImmConstant(C), m_Value(X)))) { in SimplifyDemandedUseBits()
696 return InsertNewInstWith(Lshr, I->getIterator()); in SimplifyDemandedUseBits()
704 ShlOperator *IOp = cast<ShlOperator>(I); in SimplifyDemandedUseBits()
710 if (SimplifyDemandedBits(I, 0, DemandedMaskIn, Known, Q, Depth + 1)) in SimplifyDemandedUseBits()
711 return I; in SimplifyDemandedUseBits()
723 if (SimplifyDemandedBits(I, 0, DemandedFromOp, Known, Q, Depth + 1)) { in SimplifyDemandedUseBits()
725 I->dropPoisonGeneratingFlags(); in SimplifyDemandedUseBits()
726 return I; in SimplifyDemandedUseBits()
729 llvm::computeKnownBits(I, Known, Q, Depth); in SimplifyDemandedUseBits()
735 if (match(I->getOperand(1), m_APInt(SA))) { in SimplifyDemandedUseBits()
739 if (I->hasOneUse()) { in SimplifyDemandedUseBits()
740 auto *Inst = dyn_cast<Instruction>(I->user_back()); in SimplifyDemandedUseBits()
746 llvm::computeKnownBits(I, Known, Q, Depth); in SimplifyDemandedUseBits()
760 ComputeNumSignBits(I->getOperand(0), Q.CxtI, Depth + 1); in SimplifyDemandedUseBits()
762 return I->getOperand(0); in SimplifyDemandedUseBits()
770 if (match(I->getOperand(0), m_Shl(m_ImmConstant(C), m_Value(X)))) { in SimplifyDemandedUseBits()
777 return InsertNewInstWith(Shl, I->getIterator()); in SimplifyDemandedUseBits()
782 if (match(I->getOperand(0), in SimplifyDemandedUseBits()
787 return InsertNewInstWith(Mul, I->getIterator()); in SimplifyDemandedUseBits()
793 if (SimplifyDemandedBits(I, 0, DemandedMaskIn, Known, Q, Depth + 1)) { in SimplifyDemandedUseBits()
795 I->dropPoisonGeneratingFlags(); in SimplifyDemandedUseBits()
796 return I; in SimplifyDemandedUseBits()
803 llvm::computeKnownBits(I, Known, Q, Depth); in SimplifyDemandedUseBits()
808 unsigned SignBits = ComputeNumSignBits(I->getOperand(0), Q.CxtI, Depth + 1); in SimplifyDemandedUseBits()
814 return I->getOperand(0); in SimplifyDemandedUseBits()
823 I->getOperand(0), I->getOperand(1), I->getName()); in SimplifyDemandedUseBits()
824 return InsertNewInstWith(NewVal, I->getIterator()); in SimplifyDemandedUseBits()
828 if (match(I->getOperand(1), m_APInt(SA))) { in SimplifyDemandedUseBits()
838 if (SimplifyDemandedBits(I, 0, DemandedMaskIn, Known, Q, Depth + 1)) { in SimplifyDemandedUseBits()
840 I->dropPoisonGeneratingFlags(); in SimplifyDemandedUseBits()
841 return I; in SimplifyDemandedUseBits()
847 BinaryOperator *LShr = BinaryOperator::CreateLShr(I->getOperand(0), in SimplifyDemandedUseBits()
848 I->getOperand(1)); in SimplifyDemandedUseBits()
849 LShr->setIsExact(cast<BinaryOperator>(I)->isExact()); in SimplifyDemandedUseBits()
850 LShr->takeName(I); in SimplifyDemandedUseBits()
851 return InsertNewInstWith(LShr, I->getIterator()); in SimplifyDemandedUseBits()
856 ShiftAmt != 0, I->isExact()); in SimplifyDemandedUseBits()
858 llvm::computeKnownBits(I, Known, Q, Depth); in SimplifyDemandedUseBits()
865 if (match(I->getOperand(1), m_APInt(SA))) { in SimplifyDemandedUseBits()
870 if (SimplifyDemandedBits(I, 0, DemandedMaskIn, LHSKnown, Q, Depth + 1)) { in SimplifyDemandedUseBits()
873 I->dropPoisonGeneratingFlags(); in SimplifyDemandedUseBits()
874 return I; in SimplifyDemandedUseBits()
878 cast<BinaryOperator>(I)->isExact()); in SimplifyDemandedUseBits()
880 llvm::computeKnownBits(I, Known, Q, Depth); in SimplifyDemandedUseBits()
886 if (match(I->getOperand(1), m_APInt(Rem)) && Rem->isPowerOf2()) { in SimplifyDemandedUseBits()
888 return I->getOperand(0); in SimplifyDemandedUseBits()
892 if (SimplifyDemandedBits(I, 0, Mask2, LHSKnown, Q, Depth + 1)) in SimplifyDemandedUseBits()
893 return I; in SimplifyDemandedUseBits()
898 llvm::computeKnownBits(I, Known, Q, Depth); in SimplifyDemandedUseBits()
903 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) { in SimplifyDemandedUseBits()
919 return InsertNewInstWith(CallInst::Create(Ctpop, {X}), I->getIterator()); in SimplifyDemandedUseBits()
945 NewVal->takeName(I); in SimplifyDemandedUseBits()
946 return InsertNewInstWith(NewVal, I->getIterator()); in SimplifyDemandedUseBits()
951 unsigned MaskWidth = I->getOperand(1)->getType()->getScalarSizeInBits(); in SimplifyDemandedUseBits()
954 if (SimplifyDemandedBits(I, 0, DemandedMask, LHSKnown, Q, Depth + 1) || in SimplifyDemandedUseBits()
956 I, 1, (DemandedMask & ~LHSKnown.Zero).zextOrTrunc(MaskWidth), in SimplifyDemandedUseBits()
958 return I; in SimplifyDemandedUseBits()
971 !match(I->getOperand(1), m_Zero())) in SimplifyDemandedUseBits()
973 *I, 1, Constant::getNullValue(I->getOperand(1)->getType())); in SimplifyDemandedUseBits()
980 return I->getOperand(0); in SimplifyDemandedUseBits()
984 I, 1, (DemandedMask & ~LHSKnown.Zero).zextOrTrunc(MaskWidth))) in SimplifyDemandedUseBits()
985 return I; in SimplifyDemandedUseBits()
994 if (match(I, m_Intrinsic<Intrinsic::ptrmask>( in SimplifyDemandedUseBits()
998 LHSKnown = computeKnownBits(InnerPtr, I, Depth + 1); in SimplifyDemandedUseBits()
1011 Builder.SetInsertPoint(I); in SimplifyDemandedUseBits()
1019 replaceOperand(*I, 0, MaskedGEP); in SimplifyDemandedUseBits()
1020 return I; in SimplifyDemandedUseBits()
1031 if (!match(I->getOperand(2), m_APInt(SA))) in SimplifyDemandedUseBits()
1042 if (I->getOperand(0) != I->getOperand(1)) { in SimplifyDemandedUseBits()
1043 if (SimplifyDemandedBits(I, 0, DemandedMaskLHS, LHSKnown, Q, in SimplifyDemandedUseBits()
1045 SimplifyDemandedBits(I, 1, DemandedMaskRHS, RHSKnown, Q, in SimplifyDemandedUseBits()
1048 I->dropPoisonGeneratingReturnAttributes(); in SimplifyDemandedUseBits()
1049 return I; in SimplifyDemandedUseBits()
1054 LHSKnown = computeKnownBits(I->getOperand(0), I, Depth + 1); in SimplifyDemandedUseBits()
1056 !match(I->getOperand(0), m_SpecificInt(LHSKnown.One))) { in SimplifyDemandedUseBits()
1057 replaceOperand(*I, 0, Constant::getIntegerValue(VTy, LHSKnown.One)); in SimplifyDemandedUseBits()
1058 return I; in SimplifyDemandedUseBits()
1061 RHSKnown = computeKnownBits(I->getOperand(1), I, Depth + 1); in SimplifyDemandedUseBits()
1063 !match(I->getOperand(1), m_SpecificInt(RHSKnown.One))) { in SimplifyDemandedUseBits()
1064 replaceOperand(*I, 1, Constant::getIntegerValue(VTy, RHSKnown.One)); in SimplifyDemandedUseBits()
1065 return I; in SimplifyDemandedUseBits()
1111 llvm::computeKnownBits(I, Known, Q, Depth); in SimplifyDemandedUseBits()
1116 if (I->getType()->isPointerTy()) { in SimplifyDemandedUseBits()
1117 Align Alignment = I->getPointerAlignment(DL); in SimplifyDemandedUseBits()
1125 if (!I->getType()->isPointerTy() && in SimplifyDemandedUseBits()
1130 KnownBits ReferenceKnown = llvm::computeKnownBits(I, Q, Depth); in SimplifyDemandedUseBits()
1132 errs() << "Mismatched known bits for " << *I << " in " in SimplifyDemandedUseBits()
1133 << I->getFunction()->getName() << "\n"; in SimplifyDemandedUseBits()
1147 Instruction *I, const APInt &DemandedMask, KnownBits &Known, in SimplifyMultipleUseDemandedBits() argument
1150 Type *ITy = I->getType(); in SimplifyMultipleUseDemandedBits()
1159 switch (I->getOpcode()) { in SimplifyMultipleUseDemandedBits()
1161 llvm::computeKnownBits(I->getOperand(1), RHSKnown, Q, Depth + 1); in SimplifyMultipleUseDemandedBits()
1162 llvm::computeKnownBits(I->getOperand(0), LHSKnown, Q, Depth + 1); in SimplifyMultipleUseDemandedBits()
1163 Known = analyzeKnownBitsFromAndXorOr(cast<Operator>(I), LHSKnown, RHSKnown, in SimplifyMultipleUseDemandedBits()
1165 computeKnownBitsFromContext(I, Known, Q, Depth); in SimplifyMultipleUseDemandedBits()
1175 return I->getOperand(0); in SimplifyMultipleUseDemandedBits()
1177 return I->getOperand(1); in SimplifyMultipleUseDemandedBits()
1182 llvm::computeKnownBits(I->getOperand(1), RHSKnown, Q, Depth + 1); in SimplifyMultipleUseDemandedBits()
1183 llvm::computeKnownBits(I->getOperand(0), LHSKnown, Q, Depth + 1); in SimplifyMultipleUseDemandedBits()
1184 Known = analyzeKnownBitsFromAndXorOr(cast<Operator>(I), LHSKnown, RHSKnown, in SimplifyMultipleUseDemandedBits()
1186 computeKnownBitsFromContext(I, Known, Q, Depth); in SimplifyMultipleUseDemandedBits()
1198 return I->getOperand(0); in SimplifyMultipleUseDemandedBits()
1200 return I->getOperand(1); in SimplifyMultipleUseDemandedBits()
1205 llvm::computeKnownBits(I->getOperand(1), RHSKnown, Q, Depth + 1); in SimplifyMultipleUseDemandedBits()
1206 llvm::computeKnownBits(I->getOperand(0), LHSKnown, Q, Depth + 1); in SimplifyMultipleUseDemandedBits()
1207 Known = analyzeKnownBitsFromAndXorOr(cast<Operator>(I), LHSKnown, RHSKnown, in SimplifyMultipleUseDemandedBits()
1209 computeKnownBitsFromContext(I, Known, Q, Depth); in SimplifyMultipleUseDemandedBits()
1220 return I->getOperand(0); in SimplifyMultipleUseDemandedBits()
1222 return I->getOperand(1); in SimplifyMultipleUseDemandedBits()
1232 llvm::computeKnownBits(I->getOperand(1), RHSKnown, Q, Depth + 1); in SimplifyMultipleUseDemandedBits()
1234 return I->getOperand(0); in SimplifyMultipleUseDemandedBits()
1236 llvm::computeKnownBits(I->getOperand(0), LHSKnown, Q, Depth + 1); in SimplifyMultipleUseDemandedBits()
1238 return I->getOperand(1); in SimplifyMultipleUseDemandedBits()
1240 bool NSW = cast<OverflowingBinaryOperator>(I)->hasNoSignedWrap(); in SimplifyMultipleUseDemandedBits()
1241 bool NUW = cast<OverflowingBinaryOperator>(I)->hasNoUnsignedWrap(); in SimplifyMultipleUseDemandedBits()
1243 computeKnownBitsFromContext(I, Known, Q, Depth); in SimplifyMultipleUseDemandedBits()
1252 llvm::computeKnownBits(I->getOperand(1), RHSKnown, Q, Depth + 1); in SimplifyMultipleUseDemandedBits()
1254 return I->getOperand(0); in SimplifyMultipleUseDemandedBits()
1256 bool NSW = cast<OverflowingBinaryOperator>(I)->hasNoSignedWrap(); in SimplifyMultipleUseDemandedBits()
1257 bool NUW = cast<OverflowingBinaryOperator>(I)->hasNoUnsignedWrap(); in SimplifyMultipleUseDemandedBits()
1258 llvm::computeKnownBits(I->getOperand(0), LHSKnown, Q, Depth + 1); in SimplifyMultipleUseDemandedBits()
1260 computeKnownBitsFromContext(I, Known, Q, Depth); in SimplifyMultipleUseDemandedBits()
1265 llvm::computeKnownBits(I, Known, Q, Depth); in SimplifyMultipleUseDemandedBits()
1280 if (match(I, in SimplifyMultipleUseDemandedBits()
1292 llvm::computeKnownBits(I, Known, Q, Depth); in SimplifyMultipleUseDemandedBits()
1474 Instruction *I = dyn_cast<Instruction>(V); in SimplifyDemandedVectorElts() local
1475 if (!I) return nullptr; // Only analyze instructions. in SimplifyDemandedVectorElts()
1490 switch (I->getOpcode()) { in SimplifyDemandedVectorElts()
1497 for (auto I = gep_type_begin(GEP), E = gep_type_end(GEP); in SimplifyDemandedVectorElts() local
1498 I != E; I++) in SimplifyDemandedVectorElts()
1499 if (I.isStruct()) in SimplifyDemandedVectorElts()
1503 if (mayIndexStructType(cast<GetElementPtrInst>(*I))) in SimplifyDemandedVectorElts()
1511 for (unsigned i = 0; i < I->getNumOperands(); i++) { in SimplifyDemandedVectorElts()
1512 if (i == 0 ? match(I->getOperand(i), m_Undef()) in SimplifyDemandedVectorElts()
1513 : match(I->getOperand(i), m_Poison())) { in SimplifyDemandedVectorElts()
1518 if (I->getOperand(i)->getType()->isVectorTy()) { in SimplifyDemandedVectorElts()
1520 simplifyAndSetOp(I, i, DemandedElts, PoisonEltsOp); in SimplifyDemandedVectorElts()
1534 ConstantInt *Idx = dyn_cast<ConstantInt>(I->getOperand(2)); in SimplifyDemandedVectorElts()
1538 simplifyAndSetOp(I, 0, DemandedElts, PoisonElts2); in SimplifyDemandedVectorElts()
1556 match(I->getOperand(1), in SimplifyDemandedVectorElts()
1558 Vec->getType() == I->getType()) { in SimplifyDemandedVectorElts()
1562 simplifyAndSetOp(I, 0, PreInsertDemandedElts, PoisonElts); in SimplifyDemandedVectorElts()
1567 Worklist.push(I); in SimplifyDemandedVectorElts()
1568 return I->getOperand(0); in SimplifyDemandedVectorElts()
1576 auto *Shuffle = cast<ShuffleVectorInst>(I); in SimplifyDemandedVectorElts()
1586 if (!isa<PoisonValue>(I->getOperand(1))) { in SimplifyDemandedVectorElts()
1587 I->setOperand(1, PoisonValue::get(I->getOperand(1)->getType())); in SimplifyDemandedVectorElts()
1592 simplifyAndSetOp(I, 0, LeftDemanded, LHSPoisonElts); in SimplifyDemandedVectorElts()
1616 simplifyAndSetOp(I, 0, LeftDemanded, LHSPoisonElts); in SimplifyDemandedVectorElts()
1619 simplifyAndSetOp(I, 1, RightDemanded, RHSPoisonElts); in SimplifyDemandedVectorElts()
1706 Op, Value, ConstantInt::get(Type::getInt64Ty(I->getContext()), Idx), in SimplifyDemandedVectorElts()
1729 SelectInst *Sel = cast<SelectInst>(I); in SimplifyDemandedVectorElts()
1736 simplifyAndSetOp(I, 0, DemandedElts, PoisonElts); in SimplifyDemandedVectorElts()
1753 simplifyAndSetOp(I, 1, DemandedLHS, PoisonElts2); in SimplifyDemandedVectorElts()
1754 simplifyAndSetOp(I, 2, DemandedRHS, PoisonElts3); in SimplifyDemandedVectorElts()
1763 VectorType *VTy = dyn_cast<VectorType>(I->getOperand(0)->getType()); in SimplifyDemandedVectorElts()
1796 simplifyAndSetOp(I, 0, InputDemandedElts, PoisonElts2); in SimplifyDemandedVectorElts()
1823 simplifyAndSetOp(I, 0, DemandedElts, PoisonElts); in SimplifyDemandedVectorElts()
1827 IntrinsicInst *II = dyn_cast<IntrinsicInst>(I); in SimplifyDemandedVectorElts()
1871 if (match(I, m_BinOp(BO)) && !BO->isIntDivRem() && !BO->isShift()) { in SimplifyDemandedVectorElts()
1915 if (DT.dominates(U, I)) in SimplifyDemandedVectorElts()
1927 simplifyAndSetOp(I, 0, DemandedElts, PoisonElts); in SimplifyDemandedVectorElts()
1928 simplifyAndSetOp(I, 1, DemandedElts, PoisonElts2); in SimplifyDemandedVectorElts()
1938 return PoisonValue::get(I->getType()); in SimplifyDemandedVectorElts()
1940 return MadeChange ? I : nullptr; in SimplifyDemandedVectorElts()
1984 Instruction *I = dyn_cast<Instruction>(V); in SimplifyDemandedUseFPClass() local
1985 if (!I) { in SimplifyDemandedUseFPClass()
1993 if (!I->hasOneUse()) in SimplifyDemandedUseFPClass()
1996 if (auto *FPOp = dyn_cast<FPMathOperator>(I)) { in SimplifyDemandedUseFPClass()
2002 switch (I->getOpcode()) { in SimplifyDemandedUseFPClass()
2004 if (SimplifyDemandedFPClass(I, 0, llvm::fneg(DemandedMask), Known, in SimplifyDemandedUseFPClass()
2006 return I; in SimplifyDemandedUseFPClass()
2011 CallInst *CI = cast<CallInst>(I); in SimplifyDemandedUseFPClass()
2014 if (SimplifyDemandedFPClass(I, 0, llvm::inverse_fabs(DemandedMask), Known, in SimplifyDemandedUseFPClass()
2016 return I; in SimplifyDemandedUseFPClass()
2020 if (SimplifyDemandedFPClass(I, 0, DemandedMask, Known, Depth + 1)) in SimplifyDemandedUseFPClass()
2021 return I; in SimplifyDemandedUseFPClass()
2026 if (SimplifyDemandedFPClass(I, 0, DemandedMaskAnySign, Known, Depth + 1)) in SimplifyDemandedUseFPClass()
2027 return I; in SimplifyDemandedUseFPClass()
2031 I->setOperand(1, ConstantFP::get(VTy, -1.0)); in SimplifyDemandedUseFPClass()
2032 return I; in SimplifyDemandedUseFPClass()
2037 I->setOperand(1, ConstantFP::getZero(VTy)); in SimplifyDemandedUseFPClass()
2038 return I; in SimplifyDemandedUseFPClass()
2042 computeKnownFPClass(I->getOperand(1), fcAllFlags, CxtI, Depth + 1); in SimplifyDemandedUseFPClass()
2047 Known = computeKnownFPClass(I, ~DemandedMask, CxtI, Depth + 1); in SimplifyDemandedUseFPClass()
2055 if (SimplifyDemandedFPClass(I, 2, DemandedMask, KnownRHS, Depth + 1) || in SimplifyDemandedUseFPClass()
2056 SimplifyDemandedFPClass(I, 1, DemandedMask, KnownLHS, Depth + 1)) in SimplifyDemandedUseFPClass()
2057 return I; in SimplifyDemandedUseFPClass()
2060 return I->getOperand(2); in SimplifyDemandedUseFPClass()
2062 return I->getOperand(1); in SimplifyDemandedUseFPClass()
2069 Known = computeKnownFPClass(I, ~DemandedMask, CxtI, Depth + 1); in SimplifyDemandedUseFPClass()
2076 bool InstCombinerImpl::SimplifyDemandedFPClass(Instruction *I, unsigned OpNo, in SimplifyDemandedFPClass() argument
2080 Use &U = I->getOperandUse(OpNo); in SimplifyDemandedFPClass()
2082 SimplifyDemandedUseFPClass(U.get(), DemandedMask, Known, I, Depth); in SimplifyDemandedFPClass()