113 std::vector<BasicBlock *> Blocks;
124 struct RewrittenRangeInfo {
127 std::vector<PHINode *> PHIValuesAtPseudoExit;
130 RewrittenRangeInfo() =
default;
137 void cloneLoop(ClonedLoop &CLResult,
const char *Tag)
const;
141 Loop *createClonedLoopStructure(Loop *Original, Loop *Parent,
166 changeIterationSpaceEnd(
const LoopStructure &LS, BasicBlock *Preheader,
168 BasicBlock *ContinuationBlock)
const;
172 BasicBlock *createPreheader(
const LoopStructure &LS, BasicBlock *OldPreheader,
173 const char *Tag)
const;
179 void rewriteIncomingValuesForPHIs(
180 LoopStructure &LS, BasicBlock *ContinuationBlockAndPreheader,
181 const LoopConstrainer::RewrittenRangeInfo &RRI)
const;
195 function_ref<void(Loop *,
bool)> LPMAddNewLoop;
200 BasicBlock *OriginalPreheader =
nullptr;
204 BasicBlock *MainLoopPreheader =
nullptr;
211 LoopStructure MainLoopStructure;
217 function_ref<
void(Loop *,
bool)> LPMAddNewLoop,
218 const LoopStructure &LS, ScalarEvolution &SE,
219 DominatorTree &DT, Type *
T, SubRanges SR);
LoopConstrainer(Loop &L, LoopInfo &LI, function_ref< void(Loop *, bool)> LPMAddNewLoop, const LoopStructure &LS, ScalarEvolution &SE, DominatorTree &DT, Type *T, SubRanges SR)