Lines Matching refs:PSE
149 const SCEV *llvm::replaceSymbolicStrideSCEV(PredicatedScalarEvolution &PSE, in replaceSymbolicStrideSCEV() argument
152 const SCEV *OrigSCEV = PSE.getSCEV(Ptr); in replaceSymbolicStrideSCEV()
163 ScalarEvolution *SE = PSE.getSE(); in replaceSymbolicStrideSCEV()
168 PSE.addPredicate(*SE->getEqualPredicate(U, CT)); in replaceSymbolicStrideSCEV()
169 auto *Expr = PSE.getSCEV(Ptr); in replaceSymbolicStrideSCEV()
202 PredicatedScalarEvolution &PSE, in insert() argument
204 ScalarEvolution *SE = PSE.getSE(); in insert()
214 const SCEV *Ex = PSE.getBackedgeTakenCount(); in insert()
622 PredicatedScalarEvolution &PSE) in AccessAnalysis() argument
623 : TheLoop(TheLoop), AST(*AA), LI(LI), DepCands(DA), PSE(PSE) {} in AccessAnalysis()
726 PredicatedScalarEvolution &PSE; member in __anonf7514c230111::AccessAnalysis
734 static bool hasComputableBounds(PredicatedScalarEvolution &PSE, Value *Ptr, in hasComputableBounds() argument
737 if (PSE.getSE()->isLoopInvariant(PtrScev, L)) in hasComputableBounds()
743 AR = PSE.getAsAddRec(Ptr); in hasComputableBounds()
752 static bool isNoWrap(PredicatedScalarEvolution &PSE, in isNoWrap() argument
755 const SCEV *PtrScev = PSE.getSCEV(Ptr); in isNoWrap()
756 if (PSE.getSE()->isLoopInvariant(PtrScev, L)) in isNoWrap()
759 int64_t Stride = getPtrStride(PSE, AccessTy, Ptr, L, Strides); in isNoWrap()
760 if (Stride == 1 || PSE.hasNoOverflow(Ptr, SCEVWrapPredicate::IncrementNUSW)) in isNoWrap()
907 findForkedPointer(PredicatedScalarEvolution &PSE, in findForkedPointer() argument
910 ScalarEvolution *SE = PSE.getSE(); in findForkedPointer()
920 std::make_pair(replaceSymbolicStrideSCEV(PSE, StridesMap, Ptr), false)}; in findForkedPointer()
933 findForkedPointer(PSE, StridesMap, Ptr, TheLoop); in createCheckForAccess()
937 if (!hasComputableBounds(PSE, Ptr, PtrExpr, TheLoop, Assume)) in createCheckForAccess()
947 if (!isNoWrap(PSE, StridesMap, Ptr, AccessTy, TheLoop)) { in createCheckForAccess()
948 auto *Expr = PSE.getSCEV(Ptr); in createCheckForAccess()
951 PSE.setNoOverflow(Ptr, SCEVWrapPredicate::IncrementNUSW); in createCheckForAccess()
958 replaceSymbolicStrideSCEV(PSE, StridesMap, Ptr), false); in createCheckForAccess()
978 RtCheck.insert(TheLoop, Ptr, PtrExpr, AccessTy, IsWrite, DepId, ASId, PSE, in createCheckForAccess()
1271 PredicatedScalarEvolution &PSE, const Loop *L) { in isNoWrapAddRec() argument
1307 auto *OpScev = PSE.getSCEV(OBO->getOperand(0)); in isNoWrapAddRec()
1317 int64_t llvm::getPtrStride(PredicatedScalarEvolution &PSE, Type *AccessTy, in getPtrStride() argument
1330 const SCEV *PtrScev = replaceSymbolicStrideSCEV(PSE, StridesMap, Ptr); in getPtrStride()
1334 AR = PSE.getAsAddRec(Ptr); in getPtrStride()
1359 PSE.hasNoOverflow(Ptr, SCEVWrapPredicate::IncrementNUSW) || in getPtrStride()
1360 isNoWrapAddRec(Ptr, AR, PSE, Lp); in getPtrStride()
1364 PSE.setNoOverflow(Ptr, SCEVWrapPredicate::IncrementNUSW); in getPtrStride()
1379 const SCEV *Step = AR->getStepRecurrence(*PSE.getSE()); in getPtrStride()
1419 PSE.setNoOverflow(Ptr, SCEVWrapPredicate::IncrementNUSW); in getPtrStride()
1798 getPtrStride(PSE, ATy, APtr, InnermostLoop, Strides, true); in isDependent()
1800 getPtrStride(PSE, BTy, BPtr, InnermostLoop, Strides, true); in isDependent()
1802 const SCEV *Src = PSE.getSCEV(APtr); in isDependent()
1803 const SCEV *Sink = PSE.getSCEV(BPtr); in isDependent()
1816 const SCEV *Dist = PSE.getSE()->getMinusSCEV(Sink, Src); in isDependent()
1839 isSafeDependenceDistance(DL, *(PSE.getSE()), in isDependent()
1840 *(PSE.getBackedgeTakenCount()), *Dist, Stride, in isDependent()
2095 const SCEV *ExitCount = PSE->getBackedgeTakenCount(); in canAnalyzeLoop()
2233 AccessAnalysis Accesses(TheLoop, AA, LI, DependentAccesses, *PSE); in analyzeLoop()
2298 !getPtrStride(*PSE, LD->getType(), Ptr, TheLoop, SymbolicStrides)) { in analyzeLoop()
2341 Accesses.canCheckPtrAtRT(*PtrRtChecking, PSE->getSE(), TheLoop, in analyzeLoop()
2372 auto *SE = PSE->getSE(); in analyzeLoop()
2493 auto *SE = PSE->getSE(); in isUniform()
2508 Value *Stride = getStrideFromPointer(Ptr, PSE->getSE(), TheLoop); in collectStridedAccess()
2529 const SCEV *StrideExpr = PSE->getSCEV(Stride); in collectStridedAccess()
2530 const SCEV *BETakenCount = PSE->getBackedgeTakenCount(); in collectStridedAccess()
2540 ScalarEvolution *SE = PSE->getSE(); in collectStridedAccess()
2565 : PSE(std::make_unique<PredicatedScalarEvolution>(*SE, *L)), in LoopAccessInfo()
2567 DepChecker(std::make_unique<MemoryDepChecker>(*PSE, L)), TheLoop(L) { in LoopAccessInfo()
2609 PSE->getPredicate().print(OS, Depth); in print()
2614 PSE->print(OS, Depth); in print()