Lines Matching refs:ICmp
88 bool makeIVComparisonInvariant(ICmpInst *ICmp, Instruction *IVOperand);
89 void eliminateIVComparison(ICmpInst *ICmp, Instruction *IVOperand);
196 bool SimplifyIndvar::makeIVComparisonInvariant(ICmpInst *ICmp, in makeIVComparisonInvariant() argument
199 ICmpInst::Predicate Pred = ICmp->getPredicate(); in makeIVComparisonInvariant()
200 if (IVOperand != ICmp->getOperand(0)) { in makeIVComparisonInvariant()
202 assert(IVOperand == ICmp->getOperand(1) && "Can't find IVOperand"); in makeIVComparisonInvariant()
209 const Loop *ICmpLoop = LI->getLoopFor(ICmp->getParent()); in makeIVComparisonInvariant()
210 const SCEV *S = SE->getSCEVAtScope(ICmp->getOperand(IVOperIdx), ICmpLoop); in makeIVComparisonInvariant()
211 const SCEV *X = SE->getSCEVAtScope(ICmp->getOperand(1 - IVOperIdx), ICmpLoop); in makeIVComparisonInvariant()
228 CheapExpansions[S] = ICmp->getOperand(IVOperIdx); in makeIVComparisonInvariant()
229 CheapExpansions[X] = ICmp->getOperand(1 - IVOperIdx); in makeIVComparisonInvariant()
257 LLVM_DEBUG(dbgs() << "INDVARS: Simplified comparison: " << *ICmp << '\n'); in makeIVComparisonInvariant()
258 ICmp->setPredicate(InvariantPredicate); in makeIVComparisonInvariant()
259 ICmp->setOperand(0, NewLHS); in makeIVComparisonInvariant()
260 ICmp->setOperand(1, NewRHS); in makeIVComparisonInvariant()
266 void SimplifyIndvar::eliminateIVComparison(ICmpInst *ICmp, in eliminateIVComparison() argument
269 ICmpInst::Predicate Pred = ICmp->getPredicate(); in eliminateIVComparison()
271 if (IVOperand != ICmp->getOperand(0)) { in eliminateIVComparison()
273 assert(IVOperand == ICmp->getOperand(1) && "Can't find IVOperand"); in eliminateIVComparison()
280 const Loop *ICmpLoop = LI->getLoopFor(ICmp->getParent()); in eliminateIVComparison()
281 const SCEV *S = SE->getSCEVAtScope(ICmp->getOperand(IVOperIdx), ICmpLoop); in eliminateIVComparison()
282 const SCEV *X = SE->getSCEVAtScope(ICmp->getOperand(1 - IVOperIdx), ICmpLoop); in eliminateIVComparison()
287 for (auto *U : ICmp->users()) in eliminateIVComparison()
291 ICmp->replaceAllUsesWith(ConstantInt::getBool(ICmp->getContext(), *Ev)); in eliminateIVComparison()
292 DeadInsts.emplace_back(ICmp); in eliminateIVComparison()
293 LLVM_DEBUG(dbgs() << "INDVARS: Eliminated comparison: " << *ICmp << '\n'); in eliminateIVComparison()
294 } else if (makeIVComparisonInvariant(ICmp, IVOperand)) { in eliminateIVComparison()
303 assert(ICmp->getPredicate() == OriginalPred && "Predicate changed?"); in eliminateIVComparison()
304 LLVM_DEBUG(dbgs() << "INDVARS: Turn to unsigned comparison: " << *ICmp in eliminateIVComparison()
306 ICmp->setPredicate(ICmpInst::getUnsignedPredicate(OriginalPred)); in eliminateIVComparison()
366 ICmpInst *ICmp = new ICmpInst(Rem, ICmpInst::ICMP_EQ, N, D); in replaceRemWithNumeratorOrZero() local
368 SelectInst::Create(ICmp, ConstantInt::get(T, 0), N, "iv.rem", Rem); in replaceRemWithNumeratorOrZero()
606 if (ICmpInst *ICmp = dyn_cast<ICmpInst>(UseInst)) { in eliminateIVUser() local
607 eliminateIVComparison(ICmp, IVOperand); in eliminateIVUser()
1571 if (auto *ICmp = dyn_cast<ICmpInst>(User)) { in widenWithVariantUse() local
1572 auto Pred = ICmp->getPredicate(); in widenWithVariantUse()
1581 ICmpUsers.push_back(ICmp); in widenWithVariantUse()