Lines Matching refs:SE
172 ScalarEvolution *SE = PSE.getSE(); in replaceSymbolicStrideSCEV() local
173 const auto *CT = SE->getOne(StrideSCEV->getType()); in replaceSymbolicStrideSCEV()
174 PSE.addPredicate(*SE->getEqualPredicate(StrideSCEV, CT)); in replaceSymbolicStrideSCEV()
210 ScalarEvolution *SE = PSE.getSE(); in insert() local
215 if (SE->isLoopInvariant(PtrExpr, Lp)) { in insert()
223 ScEnd = AR->evaluateAtIteration(Ex, *SE); in insert()
224 const SCEV *Step = AR->getStepRecurrence(*SE); in insert()
235 ScStart = SE->getUMinExpr(ScStart, ScEnd); in insert()
236 ScEnd = SE->getUMaxExpr(AR->getStart(), ScEnd); in insert()
239 assert(SE->isLoopInvariant(ScStart, Lp) && "ScStart needs to be invariant"); in insert()
240 assert(SE->isLoopInvariant(ScEnd, Lp)&& "ScEnd needs to be invariant"); in insert()
245 const SCEV *EltSizeSCEV = SE->getStoreSizeOfExpr(IdxTy, AccessTy); in insert()
246 ScEnd = SE->getAddExpr(ScEnd, EltSizeSCEV); in insert()
316 auto *Step = dyn_cast<SCEVConstant>(SinkAR->getStepRecurrence(*SE)); in tryToCreateDiffCheck()
317 if (!Step || Step != SrcAR->getStepRecurrence(*SE) || in tryToCreateDiffCheck()
331 const SCEV *SinkStartInt = SE->getPtrToIntExpr(SinkAR->getStart(), IntTy); in tryToCreateDiffCheck()
332 const SCEV *SrcStartInt = SE->getPtrToIntExpr(SrcAR->getStart(), IntTy); in tryToCreateDiffCheck()
354 SrcStartAR->getStepRecurrence(*SE) != in tryToCreateDiffCheck()
355 SinkStartAR->getStepRecurrence(*SE)) { in tryToCreateDiffCheck()
406 ScalarEvolution *SE) { in getMinFromExprs() argument
407 const SCEV *Diff = SE->getMinusSCEV(J, I); in getMinFromExprs()
422 RtCheck.Pointers[Index].NeedsFreeze, *RtCheck.SE); in addPointer()
428 ScalarEvolution &SE) { in addPointer() argument
435 const SCEV *Min0 = getMinFromExprs(Start, Low, &SE); in addPointer()
439 const SCEV *Min1 = getMinFromExprs(End, High, &SE); in addPointer()
703 bool canCheckPtrAtRT(RuntimePointerChecking &RtCheck, ScalarEvolution *SE,
890 ScalarEvolution *SE, const Loop *L, Value *Ptr, in findForkedSCEVs() argument
897 const SCEV *Scev = SE->getSCEV(Ptr); in findForkedSCEVs()
910 auto GetBinOpExpr = [&SE](unsigned Opcode, const SCEV *L, const SCEV *R) { in findForkedSCEVs()
913 return SE->getAddExpr(L, R); in findForkedSCEVs()
915 return SE->getMinusSCEV(L, R); in findForkedSCEVs()
935 findForkedSCEVs(SE, L, I->getOperand(0), BaseScevs, Depth); in findForkedSCEVs()
936 findForkedSCEVs(SE, L, I->getOperand(1), OffsetScevs, Depth); in findForkedSCEVs()
955 Type *IntPtrTy = SE->getEffectiveSCEVType( in findForkedSCEVs()
956 SE->getSCEV(GEP->getPointerOperand())->getType()); in findForkedSCEVs()
961 const SCEV *Size = SE->getSizeOfExpr(IntPtrTy, SourceTy); in findForkedSCEVs()
964 const SCEV *Scaled1 = SE->getMulExpr( in findForkedSCEVs()
965 Size, SE->getTruncateOrSignExtend(get<0>(OffsetScevs[0]), IntPtrTy)); in findForkedSCEVs()
966 const SCEV *Scaled2 = SE->getMulExpr( in findForkedSCEVs()
967 Size, SE->getTruncateOrSignExtend(get<0>(OffsetScevs[1]), IntPtrTy)); in findForkedSCEVs()
968 ScevList.emplace_back(SE->getAddExpr(get<0>(BaseScevs[0]), Scaled1), in findForkedSCEVs()
970 ScevList.emplace_back(SE->getAddExpr(get<0>(BaseScevs[1]), Scaled2), in findForkedSCEVs()
979 findForkedSCEVs(SE, L, I->getOperand(1), ChildScevs, Depth); in findForkedSCEVs()
980 findForkedSCEVs(SE, L, I->getOperand(2), ChildScevs, Depth); in findForkedSCEVs()
994 findForkedSCEVs(SE, L, I->getOperand(0), ChildScevs, Depth); in findForkedSCEVs()
995 findForkedSCEVs(SE, L, I->getOperand(1), ChildScevs, Depth); in findForkedSCEVs()
1008 findForkedSCEVs(SE, L, I->getOperand(0), LScevs, Depth); in findForkedSCEVs()
1009 findForkedSCEVs(SE, L, I->getOperand(1), RScevs, Depth); in findForkedSCEVs()
1047 ScalarEvolution *SE = PSE.getSE(); in findForkedPointer() local
1048 assert(SE->isSCEVable(Ptr->getType()) && "Value is not SCEVable!"); in findForkedPointer()
1050 findForkedSCEVs(SE, L, Ptr, Scevs, MaxForkedSCEVDepth); in findForkedPointer()
1056 SE->isLoopInvariant(get<0>(Scevs[0]), L)) && in findForkedPointer()
1058 SE->isLoopInvariant(get<0>(Scevs[1]), L))) { in findForkedPointer()
1130 ScalarEvolution *SE, Loop *TheLoop, in canCheckPtrAtRT() argument
1564 ScalarEvolution &SE, bool StrictCheck, in getPointersDiff() argument
1606 const SCEV *PtrSCEVA = SE.getSCEV(PtrA); in getPointersDiff()
1607 const SCEV *PtrSCEVB = SE.getSCEV(PtrB); in getPointersDiff()
1609 dyn_cast<SCEVConstant>(SE.getMinusSCEV(PtrSCEVB, PtrSCEVA)); in getPointersDiff()
1625 const DataLayout &DL, ScalarEvolution &SE, in sortPtrAccesses() argument
1641 std::optional<int> Diff = getPointersDiff(ElemTy, Ptr0, ElemTy, Ptr, DL, SE, in sortPtrAccesses()
1670 ScalarEvolution &SE, bool CheckType) { in isConsecutiveAccess() argument
1678 getPointersDiff(ElemTyA, PtrA, ElemTyB, PtrB, DL, SE, in isConsecutiveAccess()
1819 static bool isSafeDependenceDistance(const DataLayout &DL, ScalarEvolution &SE, in isSafeDependenceDistance() argument
1842 const SCEV *Step = SE.getConstant(BackedgeTakenCount.getType(), ByteStride); in isSafeDependenceDistance()
1843 const SCEV *Product = SE.getMulExpr(&BackedgeTakenCount, Step); in isSafeDependenceDistance()
1854 CastedProduct = SE.getZeroExtendExpr(Product, Dist.getType()); in isSafeDependenceDistance()
1856 CastedDist = SE.getNoopOrSignExtend(&Dist, Product->getType()); in isSafeDependenceDistance()
1860 const SCEV *Minus = SE.getMinusSCEV(CastedDist, CastedProduct); in isSafeDependenceDistance()
1861 if (SE.isKnownPositive(Minus)) in isSafeDependenceDistance()
1866 const SCEV *NegDist = SE.getNegativeSCEV(CastedDist); in isSafeDependenceDistance()
1867 Minus = SE.getMinusSCEV(NegDist, CastedProduct); in isSafeDependenceDistance()
1868 if (SE.isKnownPositive(Minus)) in isSafeDependenceDistance()
1914 ScalarEvolution &SE, const Loop *L) { in isLoopVariantIndirectAddress() argument
1915 return any_of(UnderlyingObjects, [&SE, L](const Value *UO) { in isLoopVariantIndirectAddress()
1916 return !SE.isLoopInvariant(SE.getSCEV(const_cast<Value *>(UO)), L); in isLoopVariantIndirectAddress()
1935 auto &SE = *PSE.getSE(); in getDependenceDistanceStrideAndSize() local
1967 const SCEV *Dist = SE.getMinusSCEV(Sink, Src); in getDependenceDistanceStrideAndSize()
1976 if (isLoopVariantIndirectAddress(UnderlyingObjects.find(APtr)->second, SE, in getDependenceDistanceStrideAndSize()
1978 isLoopVariantIndirectAddress(UnderlyingObjects.find(BPtr)->second, SE, in getDependenceDistanceStrideAndSize()
2018 ScalarEvolution &SE = *PSE.getSE(); in isDependent() local
2021 isSafeDependenceDistance(DL, SE, *(PSE.getBackedgeTakenCount()), *Dist, in isDependent()
2588 auto *SE = PSE->getSE(); in analyzeLoop() local
2591 *PtrRtChecking, SE, TheLoop, SymbolicStrides, UncomputablePtr, true); in analyzeLoop()
2723 auto *SE = PSE->getSE(); in isInvariant() local
2726 if (!SE->isSCEVable(V->getType())) in isInvariant()
2728 const SCEV *S = SE->getSCEV(V); in isInvariant()
2729 return SE->isLoopInvariant(S, TheLoop); in isInvariant()
2762 static Value *stripGetElementPtr(Value *Ptr, ScalarEvolution *SE, Loop *Lp) { in stripGetElementPtr() argument
2773 !SE->isLoopInvariant(SE->getSCEV(GEP->getOperand(i)), Lp)) in stripGetElementPtr()
2795 static const SCEV *getStrideFromPointer(Value *Ptr, ScalarEvolution *SE, Loop *Lp) { in getStrideFromPointer() argument
2808 Ptr = stripGetElementPtr(Ptr, SE, Lp); in getStrideFromPointer()
2809 const SCEV *V = SE->getSCEV(Ptr); in getStrideFromPointer()
2825 V = S->getStepRecurrence(*SE); in getStrideFromPointer()
2851 if (!SE->isLoopInvariant(V, Lp)) in getStrideFromPointer()
2919 ScalarEvolution *SE = PSE->getSE(); in collectStridedAccess() local
2921 CastedStride = SE->getNoopOrSignExtend(StrideExpr, BETakenCount->getType()); in collectStridedAccess()
2923 CastedBECount = SE->getZeroExtendExpr(BETakenCount, StrideExpr->getType()); in collectStridedAccess()
2924 const SCEV *StrideMinusBETaken = SE->getMinusSCEV(CastedStride, CastedBECount); in collectStridedAccess()
2928 if (SE->isKnownPositive(StrideMinusBETaken)) { in collectStridedAccess()
2945 LoopAccessInfo::LoopAccessInfo(Loop *L, ScalarEvolution *SE, in LoopAccessInfo() argument
2948 : PSE(std::make_unique<PredicatedScalarEvolution>(*SE, *L)), in LoopAccessInfo()
2951 PtrRtChecking = std::make_unique<RuntimePointerChecking>(*DepChecker, SE); in LoopAccessInfo()
3006 std::make_unique<LoopAccessInfo>(&L, &SE, TLI, &AA, &DT, &LI); in getInfo()
3031 auto &SE = FAM.getResult<ScalarEvolutionAnalysis>(F); in run() local
3036 return LoopAccessInfoManager(SE, AA, DT, LI, &TLI); in run()