Lines Matching refs:IVOperand
78 Value *foldIVUser(Instruction *UseInst, Instruction *IVOperand);
80 bool eliminateIdentitySCEV(Instruction *UseInst, Instruction *IVOperand);
85 bool eliminateIVUser(Instruction *UseInst, Instruction *IVOperand);
86 bool makeIVComparisonInvariant(ICmpInst *ICmp, Value *IVOperand);
87 void eliminateIVComparison(ICmpInst *ICmp, Value *IVOperand);
88 void simplifyIVRemainder(BinaryOperator *Rem, Value *IVOperand,
94 bool strengthenOverflowingOperation(BinaryOperator *OBO, Value *IVOperand);
95 bool strengthenRightShift(BinaryOperator *BO, Value *IVOperand);
107 Value *SimplifyIndvar::foldIVUser(Instruction *UseInst, Instruction *IVOperand) { in foldIVUser() argument
119 if (IVOperand != UseInst->getOperand(OperIdx) || in foldIVUser()
125 if (!isa<BinaryOperator>(IVOperand) in foldIVUser()
126 || !isa<ConstantInt>(IVOperand->getOperand(1))) in foldIVUser()
129 IVSrc = IVOperand->getOperand(0); in foldIVUser()
158 LLVM_DEBUG(dbgs() << "INDVARS: Eliminated IV operand: " << *IVOperand in foldIVUser()
169 if (IVOperand->use_empty()) in foldIVUser()
170 DeadInsts.emplace_back(IVOperand); in foldIVUser()
175 Value *IVOperand) { in makeIVComparisonInvariant() argument
178 if (IVOperand != ICmp->getOperand(0)) { in makeIVComparisonInvariant()
180 assert(IVOperand == ICmp->getOperand(1) && "Can't find IVOperand"); in makeIVComparisonInvariant()
194 auto *PN = dyn_cast<PHINode>(IVOperand); in makeIVComparisonInvariant()
244 void SimplifyIndvar::eliminateIVComparison(ICmpInst *ICmp, Value *IVOperand) { in eliminateIVComparison() argument
248 if (IVOperand != ICmp->getOperand(0)) { in eliminateIVComparison()
250 assert(IVOperand == ICmp->getOperand(1) && "Can't find IVOperand"); in eliminateIVComparison()
271 } else if (makeIVComparisonInvariant(ICmp, IVOperand)) { in eliminateIVComparison()
355 void SimplifyIndvar::simplifyIVRemainder(BinaryOperator *Rem, Value *IVOperand, in simplifyIVRemainder() argument
362 bool UsedAsNumerator = IVOperand == NValue; in simplifyIVRemainder()
623 Instruction *IVOperand) { in eliminateIVUser() argument
625 eliminateIVComparison(ICmp, IVOperand); in eliminateIVUser()
631 simplifyIVRemainder(Bin, IVOperand, IsSRem); in eliminateIVUser()
647 if (eliminateIdentitySCEV(UseInst, IVOperand)) in eliminateIVUser()
689 Instruction *IVOperand) { in eliminateIdentitySCEV() argument
691 (UseInst->getType() != IVOperand->getType()) || in eliminateIdentitySCEV()
692 (SE->getSCEV(UseInst) != SE->getSCEV(IVOperand))) in eliminateIdentitySCEV()
714 if (!DT || !DT->dominates(IVOperand, UseInst)) in eliminateIdentitySCEV()
717 if (!LI->replacementPreservesLCSSAForm(UseInst, IVOperand)) in eliminateIdentitySCEV()
722 UseInst->replaceAllUsesWith(IVOperand); in eliminateIdentitySCEV()
732 Value *IVOperand) { in strengthenOverflowingOperation() argument
795 Value *IVOperand) { in strengthenRightShift() argument
800 ConstantRange IVRange = SE->getUnsignedRange(SE->getSCEV(IVOperand)); in strengthenRightShift()
804 m_AShr(m_Shl(m_Value(), m_Specific(IVOperand)), m_APInt(C))) || in strengthenRightShift()
806 m_LShr(m_Shl(m_Value(), m_Specific(IVOperand)), m_APInt(C)))) { in strengthenRightShift()
919 Instruction *IVOperand = UseOper.second; in simplifyUsers() local
920 for (unsigned N = 0; IVOperand; ++N) { in simplifyUsers()
923 Value *NewOper = foldIVUser(UseInst, IVOperand); in simplifyUsers()
926 IVOperand = dyn_cast<Instruction>(NewOper); in simplifyUsers()
928 if (!IVOperand) in simplifyUsers()
931 if (eliminateIVUser(UseInst, IVOperand)) { in simplifyUsers()
932 pushIVUsers(IVOperand, L, Simplified, SimpleIVUsers); in simplifyUsers()
938 strengthenOverflowingOperation(BO, IVOperand)) || in simplifyUsers()
939 (isa<ShlOperator>(BO) && strengthenRightShift(BO, IVOperand))) { in simplifyUsers()
942 pushIVUsers(IVOperand, L, Simplified, SimpleIVUsers); in simplifyUsers()