Lines Matching refs:ICI
532 ICmpInst *ICI = dyn_cast<ICmpInst>(U); in eliminateTrunc() local
533 if (!ICI) return false; in eliminateTrunc()
534 assert(L->contains(ICI->getParent()) && "LCSSA form broken?"); in eliminateTrunc()
535 if (!(ICI->getOperand(0) == TI && L->isLoopInvariant(ICI->getOperand(1))) && in eliminateTrunc()
536 !(ICI->getOperand(1) == TI && L->isLoopInvariant(ICI->getOperand(0)))) in eliminateTrunc()
539 if (ICI->isSigned() && !DoesSExtCollapse) in eliminateTrunc()
541 if (ICI->isUnsigned() && !DoesZExtCollapse) in eliminateTrunc()
544 ICmpUsers.push_back(ICI); in eliminateTrunc()
547 auto CanUseZExt = [&](ICmpInst *ICI) { in eliminateTrunc() argument
549 if (ICI->isUnsigned()) in eliminateTrunc()
555 if (ICI->isEquality()) in eliminateTrunc()
561 const SCEV *SCEVOP1 = SE->getSCEV(ICI->getOperand(0)); in eliminateTrunc()
562 const SCEV *SCEVOP2 = SE->getSCEV(ICI->getOperand(1)); in eliminateTrunc()
566 for (auto *ICI : ICmpUsers) { in eliminateTrunc() local
567 bool IsSwapped = L->isLoopInvariant(ICI->getOperand(0)); in eliminateTrunc()
568 auto *Op1 = IsSwapped ? ICI->getOperand(0) : ICI->getOperand(1); in eliminateTrunc()
576 ICmpInst::Predicate Pred = ICI->getPredicate(); in eliminateTrunc()
578 if (CanUseZExt(ICI)) { in eliminateTrunc()
580 Ext = new ZExtInst(Op1, IVTy, "zext", ICI); in eliminateTrunc()
584 Ext = new SExtInst(Op1, IVTy, "sext", ICI); in eliminateTrunc()
590 ICmpInst *NewICI = new ICmpInst(ICI, Pred, IV, Ext); in eliminateTrunc()
591 ICI->replaceAllUsesWith(NewICI); in eliminateTrunc()
592 DeadInsts.emplace_back(ICI); in eliminateTrunc()