Lines Matching refs:IVOperand

80     Value *foldIVUser(Instruction *UseInst, Instruction *IVOperand);
82 bool eliminateIdentitySCEV(Instruction *UseInst, Instruction *IVOperand);
88 bool eliminateIVUser(Instruction *UseInst, Instruction *IVOperand);
89 bool makeIVComparisonInvariant(ICmpInst *ICmp, Value *IVOperand);
90 void eliminateIVComparison(ICmpInst *ICmp, Value *IVOperand);
91 void simplifyIVRemainder(BinaryOperator *Rem, Value *IVOperand,
97 bool strengthenOverflowingOperation(BinaryOperator *OBO, Value *IVOperand);
98 bool strengthenRightShift(BinaryOperator *BO, Value *IVOperand);
128 Value *SimplifyIndvar::foldIVUser(Instruction *UseInst, Instruction *IVOperand) { in foldIVUser() argument
140 if (IVOperand != UseInst->getOperand(OperIdx) || in foldIVUser()
146 if (!isa<BinaryOperator>(IVOperand) in foldIVUser()
147 || !isa<ConstantInt>(IVOperand->getOperand(1))) in foldIVUser()
150 IVSrc = IVOperand->getOperand(0); in foldIVUser()
179 LLVM_DEBUG(dbgs() << "INDVARS: Eliminated IV operand: " << *IVOperand in foldIVUser()
190 if (IVOperand->use_empty()) in foldIVUser()
191 DeadInsts.emplace_back(IVOperand); in foldIVUser()
196 Value *IVOperand) { in makeIVComparisonInvariant() argument
199 if (IVOperand != ICmp->getOperand(0)) { in makeIVComparisonInvariant()
201 assert(IVOperand == ICmp->getOperand(1) && "Can't find IVOperand"); in makeIVComparisonInvariant()
212 auto *PN = dyn_cast<PHINode>(IVOperand); in makeIVComparisonInvariant()
265 void SimplifyIndvar::eliminateIVComparison(ICmpInst *ICmp, Value *IVOperand) { in eliminateIVComparison() argument
269 if (IVOperand != ICmp->getOperand(0)) { in eliminateIVComparison()
271 assert(IVOperand == ICmp->getOperand(1) && "Can't find IVOperand"); in eliminateIVComparison()
292 } else if (makeIVComparisonInvariant(ICmp, IVOperand)) { in eliminateIVComparison()
376 void SimplifyIndvar::simplifyIVRemainder(BinaryOperator *Rem, Value *IVOperand, in simplifyIVRemainder() argument
383 bool UsedAsNumerator = IVOperand == NValue; in simplifyIVRemainder()
602 Instruction *IVOperand) { in eliminateIVUser() argument
604 eliminateIVComparison(ICmp, IVOperand); in eliminateIVUser()
610 simplifyIVRemainder(Bin, IVOperand, IsSRem); in eliminateIVUser()
630 if (eliminateIdentitySCEV(UseInst, IVOperand)) in eliminateIVUser()
679 Instruction *IVOperand) { in eliminateIdentitySCEV() argument
681 (UseInst->getType() != IVOperand->getType()) || in eliminateIdentitySCEV()
682 (SE->getSCEV(UseInst) != SE->getSCEV(IVOperand))) in eliminateIdentitySCEV()
704 if (!DT || !DT->dominates(IVOperand, UseInst)) in eliminateIdentitySCEV()
707 if (!LI->replacementPreservesLCSSAForm(UseInst, IVOperand)) in eliminateIdentitySCEV()
712 UseInst->replaceAllUsesWith(IVOperand); in eliminateIdentitySCEV()
722 Value *IVOperand) { in strengthenOverflowingOperation() argument
748 Value *IVOperand) { in strengthenRightShift() argument
753 ConstantRange IVRange = SE->getUnsignedRange(SE->getSCEV(IVOperand)); in strengthenRightShift()
757 m_AShr(m_Shl(m_Value(), m_Specific(IVOperand)), m_APInt(C))) || in strengthenRightShift()
759 m_LShr(m_Shl(m_Value(), m_Specific(IVOperand)), m_APInt(C)))) { in strengthenRightShift()
872 Instruction *IVOperand = UseOper.second; in simplifyUsers() local
873 for (unsigned N = 0; IVOperand; ++N) { in simplifyUsers()
876 Value *NewOper = foldIVUser(UseInst, IVOperand); in simplifyUsers()
879 IVOperand = dyn_cast<Instruction>(NewOper); in simplifyUsers()
881 if (!IVOperand) in simplifyUsers()
884 if (eliminateIVUser(UseInst, IVOperand)) { in simplifyUsers()
885 pushIVUsers(IVOperand, L, Simplified, SimpleIVUsers); in simplifyUsers()
891 strengthenOverflowingOperation(BO, IVOperand)) || in simplifyUsers()
892 (isa<ShlOperator>(BO) && strengthenRightShift(BO, IVOperand))) { in simplifyUsers()
895 pushIVUsers(IVOperand, L, Simplified, SimpleIVUsers); in simplifyUsers()