A reimplementation of ModuloScheduleExpander. It works by generating a standalone kernel loop and peeling out the prologs and epilogs.
Synopsis
Declared in <llvm/CodeGen/ModuloSchedule.h>
class PeelingModuloScheduleExpander;
Member Functions
Name |
Description |
|
Create a new PeelingModuloScheduleExpander. |
Expand the schedule by peeling prologs and epilogs from a rewritten kernel. |
|
Runs ModuloScheduleExpander and treats it as a golden input to validate aspects of the code generated by PeelingModuloScheduleExpander. |
Protected Member Functions
Name |
Description |
Create an LCSSA‐style exiting block that clones kernel PHIs. |
|
Delete instructions whose stage is less than |
|
Insert branches between prologs, kernel and epilogs. |
|
All prolog and epilog blocks are clones of the kernel, so any produced register in one block has an corollary in all other blocks. |
|
Helper function to find the right canonical register for a phi instruction coming from a peeled out prologue. |
|
Helper to get the stage of an instruction in the schedule. |
|
Move instructions of stage |
|
Peels one iteration of the rewritten kernel (BB) in the specified direction. |
|
Peel the kernel forwards and backwards to produce prologs and epilogs, and stitch them together. |
|
Converts BB from the original loop body to the rewritten, pipelined steady‐state. |
|
Change all users of MI, if MI is predicated out (LiveStages[MI‐>getParent()]== false). |
Protected Data Members
Name |
Description |
For every block, the stages that are available. A stage can be available but not produced (in the epilog) or produced but not available (in the prolog). |
|
The original loop block that gets rewritten in‐place. |
|
Maps (block, canonical MI) to the corresponding MI in that block. |
|
CanonicalMIs and BlockMIs form a bidirectional map between any of the loop kernel clones. |
|
All prolog and epilog blocks. |
|
Illegal phis that need to be deleted once we re‐link stages. |
|
Live interval information, or nullptr if unused. |
|
For every block, the stages that are produced. |
|
Target loop info before kernel peeling. |
|
The machine function containing the schedule. |
|
Register information for MF. |
|
State passed from peelKernel to peelPrologAndEpilogs(). |
|
State passed from peelKernel to peelPrologAndEpilogs(). |
|
When peeling the epilogue keep track of the distance between the phi nodes and the kernel. |
|
The original loop preheader. |
|
All prolog and epilog blocks. |
|
Subtarget information for MF. |
|
The schedule being expanded. |
|
Target instruction info from the subtarget. |
Created with MrDocs