31#define DEBUG_TYPE "loop-rotate"
35 cl::desc(
"The default maximum header size for automatic loop rotation"));
39 cl::desc(
"Run loop-rotation in the prepare-for-lto stage. This option "
40 "should be used for testing only."));
43 : EnableHeaderDuplication(EnableHeaderDuplication),
44 PrepareForLTO(PrepareForLTO) {}
49 OS, MapClassName2PassName);
51 if (!EnableHeaderDuplication)
53 OS <<
"header-duplication;";
57 OS <<
"prepare-for-lto";
68 (EnableHeaderDuplication && !L.getHeader()->getParent()->hasMinSize()) ||
75 std::optional<MemorySSAUpdater> MSSAU;
79 MSSAU ? &*MSSAU :
nullptr, SQ,
false, Threshold,
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static cl::opt< unsigned > DefaultRotationThreshold("rotation-max-header-size", cl::init(16), cl::Hidden, cl::desc("The default maximum header size for automatic loop rotation"))
static cl::opt< bool > PrepareForLTOOption("rotation-prepare-for-lto", cl::init(false), cl::Hidden, cl::desc("Run loop-rotation in the prepare-for-lto stage. This option " "should be used for testing only."))
This file exposes an interface to building/using memory SSA to walk memory instructions using a use/d...
A container for analyses that lazily runs them and caches their results.
A parsed version of the target data layout string in and methods for querying it.
This class provides an interface for updating the loop pass manager based on mutations to the loop ne...
LoopRotatePass(bool EnableHeaderDuplication=true, bool PrepareForLTO=false)
void printPipeline(raw_ostream &OS, function_ref< StringRef(StringRef)> MapClassName2PassName)
PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM, LoopStandardAnalysisResults &AR, LPMUpdater &U)
Represents a single loop in the control flow graph.
An analysis that produces MemorySSA for a function.
void verifyMemorySSA(VerificationLevel=VerificationLevel::Fast) const
Verify that MemorySSA is self consistent (IE definitions dominate all uses, uses appear in the right ...
A set of analyses that are preserved following a run of a transformation pass.
static PreservedAnalyses all()
Construct a special preserved set that preserves all passes.
StringRef - Represent a constant reference to a string, i.e.
An efficient, type-erasing, non-owning reference to a callable.
This class implements an extremely fast bulk output stream that can only output to a stream.
initializer< Ty > init(const Ty &Val)
This is an optimization pass for GlobalISel generic memory operations.
TransformationMode hasVectorizeTransformation(const Loop *L)
bool VerifyMemorySSA
Enables verification of MemorySSA.
@ TM_ForcedByUser
The transformation was directed by the user, e.g.
PreservedAnalyses getLoopPassPreservedAnalyses()
Returns the minimum set of Analyses that all loop passes must preserve.
const SimplifyQuery getBestSimplifyQuery(Pass &, Function &)
bool LoopRotation(Loop *L, LoopInfo *LI, const TargetTransformInfo *TTI, AssumptionCache *AC, DominatorTree *DT, ScalarEvolution *SE, MemorySSAUpdater *MSSAU, const SimplifyQuery &SQ, bool RotationOnly, unsigned Threshold, bool IsUtilMode, bool PrepareForLTO=false)
Convert a loop into a loop with bottom test.
The adaptor from a function pass to a loop pass computes these analyses and makes them available to t...
TargetTransformInfo & TTI
A CRTP mix-in to automatically provide informational APIs needed for passes.