Lines Matching refs:SE

148   static bool parseRangeCheckICmp(Loop *L, ICmpInst *ICI, ScalarEvolution &SE,
153 extractRangeChecksFromCond(Loop *L, ScalarEvolution &SE, Use &ConditionUse,
197 bool isEmpty(ScalarEvolution &SE, bool IsSigned) const { in isEmpty() argument
201 return SE.isKnownPredicate(ICmpInst::ICMP_SGE, Begin, End); in isEmpty()
203 return SE.isKnownPredicate(ICmpInst::ICMP_UGE, Begin, End); in isEmpty()
214 Optional<Range> computeSafeIterationSpace(ScalarEvolution &SE,
224 extractRangeChecksFromBranch(BranchInst *BI, Loop *L, ScalarEvolution &SE,
232 ScalarEvolution &SE; member in __anonfaeb45920111::InductiveRangeCheckElimination
246 InductiveRangeCheckElimination(ScalarEvolution &SE, in InductiveRangeCheckElimination() argument
249 : SE(SE), BPI(BPI), DT(DT), LI(LI), GetBFI(GetBFI) {} in InductiveRangeCheckElimination()
294 ScalarEvolution &SE, Value *&Index, in INITIALIZE_PASS_DEPENDENCY()
296 auto IsLoopInvariant = [&SE, L](Value *V) { in INITIALIZE_PASS_DEPENDENCY()
297 return SE.isLoopInvariant(SE.getSCEV(V), L); in INITIALIZE_PASS_DEPENDENCY()
353 Loop *L, ScalarEvolution &SE, Use &ConditionUse, in extractRangeChecksFromCond() argument
362 extractRangeChecksFromCond(L, SE, cast<User>(Condition)->getOperandUse(0), in extractRangeChecksFromCond()
364 extractRangeChecksFromCond(L, SE, cast<User>(Condition)->getOperandUse(1), in extractRangeChecksFromCond()
375 if (!parseRangeCheckICmp(L, ICI, SE, Index, Length, IsSigned)) in extractRangeChecksFromCond()
378 const auto *IndexAddRec = dyn_cast<SCEVAddRecExpr>(SE.getSCEV(Index)); in extractRangeChecksFromCond()
389 End = SE.getSCEV(Length); in extractRangeChecksFromCond()
395 const SCEV *SIntMax = SE.getConstant(APInt::getSignedMaxValue(BitWidth)); in extractRangeChecksFromCond()
402 IRC.Step = IndexAddRec->getStepRecurrence(SE); in extractRangeChecksFromCond()
408 BranchInst *BI, Loop *L, ScalarEvolution &SE, BranchProbabilityInfo *BPI, in extractRangeChecksFromBranch() argument
420 InductiveRangeCheck::extractRangeChecksFromCond(L, SE, BI->getOperandUse(0), in extractRangeChecksFromBranch()
618 ScalarEvolution &SE; member in __anonfaeb45920311::LoopConstrainer
643 const LoopStructure &LS, ScalarEvolution &SE, in LoopConstrainer() argument
646 SE(SE), DT(DT), LI(LI), LPMAddNewLoop(LPMAddNewLoop), OriginalLoop(L), in LoopConstrainer()
661 Loop *L, ScalarEvolution &SE) { in isSafeDecreasingBound() argument
666 if (!SE.isAvailableAtLoopEntry(BoundSCEV, L)) in isSafeDecreasingBound()
669 assert(SE.isKnownNegative(Step) && "expecting negative step"); in isSafeDecreasingBound()
686 return SE.isLoopEntryGuardedByCond(L, BoundPred, Start, BoundSCEV); in isSafeDecreasingBound()
691 const SCEV *StepPlusOne = SE.getAddExpr(Step, SE.getOne(Step->getType())); in isSafeDecreasingBound()
695 const SCEV *Limit = SE.getMinusSCEV(SE.getConstant(Min), StepPlusOne); in isSafeDecreasingBound()
698 SE.getMinusSCEV(BoundSCEV, SE.getOne(BoundSCEV->getType())); in isSafeDecreasingBound()
700 return SE.isLoopEntryGuardedByCond(L, BoundPred, Start, MinusOne) && in isSafeDecreasingBound()
701 SE.isLoopEntryGuardedByCond(L, BoundPred, BoundSCEV, Limit); in isSafeDecreasingBound()
711 Loop *L, ScalarEvolution &SE) { in isSafeIncreasingBound() argument
716 if (!SE.isAvailableAtLoopEntry(BoundSCEV, L)) in isSafeIncreasingBound()
734 return SE.isLoopEntryGuardedByCond(L, BoundPred, Start, BoundSCEV); in isSafeIncreasingBound()
739 SE.getMinusSCEV(Step, SE.getOne(Step->getType())); in isSafeIncreasingBound()
743 const SCEV *Limit = SE.getMinusSCEV(SE.getConstant(Max), StepMinusOne); in isSafeIncreasingBound()
745 return (SE.isLoopEntryGuardedByCond(L, BoundPred, Start, in isSafeIncreasingBound()
746 SE.getAddExpr(BoundSCEV, Step)) && in isSafeIncreasingBound()
747 SE.isLoopEntryGuardedByCond(L, BoundPred, BoundSCEV, Limit)); in isSafeIncreasingBound()
751 LoopStructure::parseLoopStructure(ScalarEvolution &SE, Loop &L, in parseLoopStructure() argument
792 const SCEV *LatchCount = SE.getExitCount(&L, Latch); in parseLoopStructure()
800 const SCEV *LeftSCEV = SE.getSCEV(LeftValue); in parseLoopStructure()
804 const SCEV *RightSCEV = SE.getSCEV(RightValue); in parseLoopStructure()
827 dyn_cast<SCEVAddRecExpr>(SE.getSignExtendExpr(AR, WideTy)); in parseLoopStructure()
829 const SCEV *ExtendedStart = SE.getSignExtendExpr(AR->getStart(), WideTy); in parseLoopStructure()
831 SE.getSignExtendExpr(AR->getStepRecurrence(SE), WideTy); in parseLoopStructure()
834 ExtendAfterOp->getStepRecurrence(SE) == ExtendedStep; in parseLoopStructure()
852 const SCEV* StepRec = IndVarBase->getStepRecurrence(SE); in parseLoopStructure()
868 const SCEV *Addend = SE.getNegativeSCEV(IndVarBase->getStepRecurrence(SE)); in parseLoopStructure()
869 const SCEV *IndVarStart = SE.getAddExpr(StartNext, Addend); in parseLoopStructure()
870 const SCEV *Step = SE.getSCEV(StepCI); in parseLoopStructure()
891 if (isKnownNonNegativeInLoop(IndVarStart, &L, SE) && in parseLoopStructure()
892 isKnownNonNegativeInLoop(RightSCEV, &L, SE)) in parseLoopStructure()
903 cannotBeMinInLoop(RightSCEV, &L, SE, /*Signed*/false)) { in parseLoopStructure()
905 RightSCEV = SE.getMinusSCEV(RightSCEV, in parseLoopStructure()
906 SE.getOne(RightSCEV->getType())); in parseLoopStructure()
908 } else if (cannotBeMinInLoop(RightSCEV, &L, SE, /*Signed*/true)) { in parseLoopStructure()
910 RightSCEV = SE.getMinusSCEV(RightSCEV, in parseLoopStructure()
911 SE.getOne(RightSCEV->getType())); in parseLoopStructure()
934 LatchBrExitIdx, &L, SE)) { in parseLoopStructure()
943 SE.getAddExpr(RightSCEV, SE.getOne(RightSCEV->getType())); in parseLoopStructure()
967 cannotBeMaxInLoop(RightSCEV, &L, SE, /* Signed */ false)) { in parseLoopStructure()
969 RightSCEV = SE.getAddExpr(RightSCEV, SE.getOne(RightSCEV->getType())); in parseLoopStructure()
971 } else if (cannotBeMaxInLoop(RightSCEV, &L, SE, /* Signed */ true)) { in parseLoopStructure()
973 RightSCEV = SE.getAddExpr(RightSCEV, SE.getOne(RightSCEV->getType())); in parseLoopStructure()
999 LatchBrExitIdx, &L, SE)) { in parseLoopStructure()
1009 SE.getMinusSCEV(RightSCEV, SE.getOne(RightSCEV->getType())); in parseLoopStructure()
1017 assert(SE.getLoopDisposition(LatchCount, &L) == in parseLoopStructure()
1023 SCEVExpander Expander(SE, DL, "irce"); in parseLoopStructure()
1055 static const SCEV *NoopOrExtend(const SCEV *S, Type *Ty, ScalarEvolution &SE, in NoopOrExtend() argument
1057 return Signed ? SE.getNoopOrSignExtend(S, Ty) : SE.getNoopOrZeroExtend(S, Ty); in NoopOrExtend()
1077 const SCEV *Start = NoopOrExtend(SE.getSCEV(MainLoopStructure.IndVarStart), in calculateSubRanges()
1078 RTy, SE, IsSignedPredicate); in calculateSubRanges()
1079 const SCEV *End = NoopOrExtend(SE.getSCEV(MainLoopStructure.LoopExitAt), RTy, in calculateSubRanges()
1080 SE, IsSignedPredicate); in calculateSubRanges()
1090 const SCEV *One = SE.getOne(RTy); in calculateSubRanges()
1095 GreatestSeen = SE.getMinusSCEV(End, One); in calculateSubRanges()
1112 Smallest = SE.getAddExpr(End, One); in calculateSubRanges()
1113 Greatest = SE.getAddExpr(Start, One); in calculateSubRanges()
1119 ? SE.getSMaxExpr(Smallest, SE.getSMinExpr(Greatest, S)) in calculateSubRanges()
1120 : SE.getUMaxExpr(Smallest, SE.getUMinExpr(Greatest, S)); in calculateSubRanges()
1130 SE.isKnownPredicate(PredLE, Range.getBegin(), Smallest); in calculateSubRanges()
1135 SE.isKnownPredicate(PredLT, GreatestSeen, Range.getEnd()); in calculateSubRanges()
1402 LatchTakenCount = SE.getExitCount(&OriginalLoop, MainLoopStructure.Latch); in run()
1422 SCEVExpander Expander(SE, F.getParent()->getDataLayout(), "irce"); in run()
1437 cast<SCEVConstant>(SE.getConstant(IVTy, -1, true /* isSigned */)); in run()
1444 else if (cannotBeMinInLoop(*SR.HighLimit, &OriginalLoop, SE, in run()
1446 ExitPreLoopAtSCEV = SE.getAddExpr(*SR.HighLimit, MinusOneS); in run()
1471 else if (cannotBeMinInLoop(*SR.LowLimit, &OriginalLoop, SE, in run()
1473 ExitMainLoopAtSCEV = SE.getAddExpr(*SR.LowLimit, MinusOneS); in run()
1560 formLCSSARecursively(*L, DT, &LI, &SE); in run()
1561 simplifyLoop(L, &DT, &LI, &SE, nullptr, nullptr, true); in run()
1581 ScalarEvolution &SE, const SCEVAddRecExpr *IndVar, in computeSafeIterationSpace() argument
1612 const SCEV *A = NoopOrExtend(IndVar->getStart(), RCType, SE, IsLatchSigned); in computeSafeIterationSpace()
1614 NoopOrExtend(IndVar->getStepRecurrence(SE), RCType, SE, IsLatchSigned)); in computeSafeIterationSpace()
1626 const SCEV *SIntMax = SE.getConstant(APInt::getSignedMaxValue(BitWidth)); in computeSafeIterationSpace()
1656 const SCEV *XMinusSIntMax = SE.getMinusSCEV(X, SIntMax); in computeSafeIterationSpace()
1657 return SE.getMinusSCEV(X, SE.getSMaxExpr(Y, XMinusSIntMax), in computeSafeIterationSpace()
1670 return SE.getMinusSCEV(X, SE.getSMinExpr(X, Y), SCEV::FlagNUW); in computeSafeIterationSpace()
1672 const SCEV *M = SE.getMinusSCEV(C, A); in computeSafeIterationSpace()
1673 const SCEV *Zero = SE.getZero(M->getType()); in computeSafeIterationSpace()
1678 const SCEV *One = SE.getOne(X->getType()); in computeSafeIterationSpace()
1680 if (isKnownNonNegativeInLoop(X, L, SE)) in computeSafeIterationSpace()
1682 else if (isKnownNegativeInLoop(X, L, SE)) in computeSafeIterationSpace()
1686 const SCEV *NegOne = SE.getNegativeSCEV(One); in computeSafeIterationSpace()
1687 return SE.getAddExpr(SE.getSMaxExpr(SE.getSMinExpr(X, Zero), NegOne), One); in computeSafeIterationSpace()
1700 const SCEV *Begin = SE.getMulExpr(ClampedSubtract(Zero, M), EndIsNonNegative); in computeSafeIterationSpace()
1701 const SCEV *End = SE.getMulExpr(ClampedSubtract(REnd, M), EndIsNonNegative); in computeSafeIterationSpace()
1706 IntersectSignedRange(ScalarEvolution &SE, in IntersectSignedRange() argument
1709 if (R2.isEmpty(SE, /* IsSigned */ true)) in IntersectSignedRange()
1716 assert(!R1Value.isEmpty(SE, /* IsSigned */ true) && in IntersectSignedRange()
1724 const SCEV *NewBegin = SE.getSMaxExpr(R1Value.getBegin(), R2.getBegin()); in IntersectSignedRange()
1725 const SCEV *NewEnd = SE.getSMinExpr(R1Value.getEnd(), R2.getEnd()); in IntersectSignedRange()
1729 if (Ret.isEmpty(SE, /* IsSigned */ true)) in IntersectSignedRange()
1735 IntersectUnsignedRange(ScalarEvolution &SE, in IntersectUnsignedRange() argument
1738 if (R2.isEmpty(SE, /* IsSigned */ false)) in IntersectUnsignedRange()
1745 assert(!R1Value.isEmpty(SE, /* IsSigned */ false) && in IntersectUnsignedRange()
1753 const SCEV *NewBegin = SE.getUMaxExpr(R1Value.getBegin(), R2.getBegin()); in IntersectUnsignedRange()
1754 const SCEV *NewEnd = SE.getUMinExpr(R1Value.getEnd(), R2.getEnd()); in IntersectUnsignedRange()
1758 if (Ret.isEmpty(SE, /* IsSigned */ false)) in IntersectUnsignedRange()
1770 auto &SE = AM.getResult<ScalarEvolutionAnalysis>(F); in run() local
1778 InductiveRangeCheckElimination IRCE(SE, &BPI, DT, LI, { getBFI }); in run()
1784 CFGChanged |= simplifyLoop(L, &DT, &LI, &SE, nullptr, nullptr, in run()
1786 Changed |= formLCSSARecursively(*L, DT, &LI, &SE); in run()
1825 ScalarEvolution &SE = getAnalysis<ScalarEvolutionWrapperPass>().getSE(); in runOnFunction() local
1830 InductiveRangeCheckElimination IRCE(SE, &BPI, DT, LI); in runOnFunction()
1835 Changed |= simplifyLoop(L, &DT, &LI, &SE, nullptr, nullptr, in runOnFunction()
1837 Changed |= formLCSSARecursively(*L, DT, &LI, &SE); in runOnFunction()
1903 InductiveRangeCheck::extractRangeChecksFromBranch(TBI, L, SE, BPI, in run()
1924 LoopStructure::parseLoopStructure(SE, *L, FailureReason); in run()
1934 cast<SCEVAddRecExpr>(SE.getMinusSCEV(SE.getSCEV(LS.IndVarBase), SE.getSCEV(LS.IndVarStep))); in run()
1949 auto Result = IRC.computeSafeIterationSpace(SE, IndVar, in run()
1953 IntersectRange(SE, SafeIterRange, Result.value()); in run()
1955 assert(!MaybeSafeIterRange.value().isEmpty(SE, LS.IsSignedPredicate) && in run()
1966 LoopConstrainer LC(*L, LI, LPMAddNewLoop, LS, SE, DT, SafeIterRange.value()); in run()