diff --git a/llvm/include/llvm/CodeGen/ModuloSchedule.h b/llvm/include/llvm/CodeGen/ModuloSchedule.h --- a/llvm/include/llvm/CodeGen/ModuloSchedule.h +++ b/llvm/include/llvm/CodeGen/ModuloSchedule.h @@ -342,6 +342,8 @@ MI = CanonicalMIs[MI]; return Schedule.getStage(MI); } + /// Target loop info before kernel peeling. + std::unique_ptr Info = nullptr; }; /// Expander that simply annotates each scheduled instruction with a post-instr diff --git a/llvm/lib/CodeGen/ModuloSchedule.cpp b/llvm/lib/CodeGen/ModuloSchedule.cpp --- a/llvm/lib/CodeGen/ModuloSchedule.cpp +++ b/llvm/lib/CodeGen/ModuloSchedule.cpp @@ -1759,10 +1759,6 @@ } void PeelingModuloScheduleExpander::fixupBranches() { - std::unique_ptr Info = - TII->analyzeLoopForPipelining(BB); - assert(Info); - // Work outwards from the kernel. bool KernelDisposed = false; int TC = Schedule.getNumStages() - 1; @@ -1818,6 +1814,8 @@ BB = Schedule.getLoop()->getTopBlock(); Preheader = Schedule.getLoop()->getLoopPreheader(); LLVM_DEBUG(Schedule.dump()); + Info = TII->analyzeLoopForPipelining(BB); + assert(Info); rewriteKernel(); peelPrologAndEpilogs();