Insert a runtime prolog or epilog so L can be unrolled by Count.
Synopsis
Declared in <llvm/Transforms/Utils/UnrollLoop.h>
bool
UnrollRuntimeLoopRemainder(
Loop* L,
unsigned int Count,
bool AllowExpensiveTripCount,
bool UseEpilogRemainder,
bool UnrollRemainder,
bool ForgetAllSCEV,
LoopInfo* LI,
ScalarEvolution* SE,
DominatorTree* DT,
AssumptionCache* AC,
TargetTransformInfo const* TTI,
bool PreserveLCSSA,
unsigned int SCEVExpansionBudget,
bool RuntimeUnrollMultiExit,
Loop** ResultLoop = nullptr,
std::optional<unsigned int> OriginalTripCount = std::nullopt,
BranchProbability OriginalLoopProb = BranchProbability::getUnknown());
Description
Ensures the latch trip count is a multiple of Count when the trip count is not known statically. May create and optionally unroll a remainder loop.
Return Value
True if the remainder transformation succeeded.
Parameters
Name |
Description |
L |
Loop to prepare for runtime unrolling. |
Count |
Unroll factor that the remainder logic must satisfy. |
AllowExpensiveTripCount |
Allow costly run‐time trip‐count computation. |
UseEpilogRemainder |
Prefer an epilog remainder over a prolog. |
UnrollRemainder |
Unroll the generated remainder loop when profitable. |
ForgetAllSCEV |
Forget all SCEV expressions for the loop after rewrite. |
LI |
LoopInfo to keep consistent. |
SE |
ScalarEvolution used to compute the trip count. |
DT |
Dominator tree to update. |
AC |
Assumption cache used by subsequent simplifications. |
TTI |
Target transform info for cost checks. |
PreserveLCSSA |
Whether to preserve LCSSA form. |
SCEVExpansionBudget |
Budget for expanding the trip‐count SCEV. |
RuntimeUnrollMultiExit |
Allow runtime unrolling with multiple exits. |
ResultLoop |
If non‐null, receives the remainder loop when created. |
OriginalTripCount |
Optional original trip count used for probabilities. |
OriginalLoopProb |
Optional original loop‐latch branch probability. |
Created with MrDocs