LLVM 22.0.0git
ModuloSchedule.cpp File Reference

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "pipeliner"

Functions

static void getPhiRegs (MachineInstr &Phi, MachineBasicBlock *Loop, Register &InitVal, Register &LoopVal)
 Return the register values for the operands of a Phi instruction.
static Register getInitPhiReg (MachineInstr &Phi, MachineBasicBlock *LoopBB)
 Return the Phi register value that comes from the incoming block.
static Register getLoopPhiReg (MachineInstr &Phi, MachineBasicBlock *LoopBB)
 Return the Phi register value that comes the loop block.
static void replaceRegUsesAfterLoop (Register FromReg, Register ToReg, MachineBasicBlock *MBB, MachineRegisterInfo &MRI)
 Replace all uses of FromReg that appear outside the specified basic block with ToReg.
static bool hasUseAfterLoop (Register Reg, MachineBasicBlock *BB, MachineRegisterInfo &MRI)
 Return true if the register has a use that occurs outside the specified loop.
static void removePhis (MachineBasicBlock *BB, MachineBasicBlock *Incoming)
 Remove the incoming block from the Phis in a basic block.
static MachineBasicBlockcreateDedicatedExit (MachineBasicBlock *Loop, MachineBasicBlock *Exit, LiveIntervals &LIS)
 Create a dedicated exit for Loop.
static MachineInstrgetLoopPhiUser (Register Reg, MachineBasicBlock *Loop)
 Return a phi if Reg is referenced by the phi.
static void replacePhiSrc (MachineInstr &Phi, Register OrigReg, Register NewReg, MachineBasicBlock *NewMBB)
 INITIALIZE_PASS_BEGIN (ModuloScheduleTest, "modulo-schedule-test", "Modulo Schedule test pass", false, false) INITIALIZE_PASS_END(ModuloScheduleTest
static void parseSymbolString (StringRef S, int &Cycle, int &Stage)

Variables

static cl::opt< boolSwapBranchTargetsMVE ("pipeliner-swap-branch-targets-mve", cl::Hidden, cl::init(false), cl::desc("Swap target blocks of a conditional branch for MVE expander"))
modulo schedule test
modulo schedule Modulo Schedule test pass
modulo schedule Modulo Schedule test false

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "pipeliner"

Definition at line 22 of file ModuloSchedule.cpp.

Function Documentation

◆ createDedicatedExit()

MachineBasicBlock * createDedicatedExit ( MachineBasicBlock * Loop,
MachineBasicBlock * Exit,
LiveIntervals & LIS )
static

Create a dedicated exit for Loop.

Exit is the original exit for Loop. If it is already dedicated exit, return it. Otherwise, insert a new block between them and return the new block.

Definition at line 2138 of file ModuloSchedule.cpp.

References llvm::MachineBasicBlock::addSuccessor(), Cond, llvm::MachineFunction::CreateMachineBasicBlock(), llvm::dwarf_linker::DebugLoc, llvm::TargetSubtargetInfo::getInstrInfo(), llvm::MachineFunction::getSubtarget(), llvm::MachineFunction::insert(), llvm::LiveIntervals::insertMBBInMaps(), llvm_unreachable, TBB, and TII.

◆ getInitPhiReg()

Register getInitPhiReg ( MachineInstr & Phi,
MachineBasicBlock * LoopBB )
static

Return the Phi register value that comes from the incoming block.

Definition at line 56 of file ModuloSchedule.cpp.

References Register.

◆ getLoopPhiReg()

Register getLoopPhiReg ( MachineInstr & Phi,
MachineBasicBlock * LoopBB )
static

Return the Phi register value that comes the loop block.

Definition at line 64 of file ModuloSchedule.cpp.

References Register.

◆ getLoopPhiUser()

MachineInstr * getLoopPhiUser ( Register Reg,
MachineBasicBlock * Loop )
static

Return a phi if Reg is referenced by the phi.

canApply() guarantees that at most only one such phi exists.

Definition at line 2391 of file ModuloSchedule.cpp.

References getPhiRegs(), and Reg.

◆ getPhiRegs()

void getPhiRegs ( MachineInstr & Phi,
MachineBasicBlock * Loop,
Register & InitVal,
Register & LoopVal )
static

Return the register values for the operands of a Phi instruction.

This function assume the instruction is a Phi.

Definition at line 40 of file ModuloSchedule.cpp.

References assert(), and Register.

◆ hasUseAfterLoop()

bool hasUseAfterLoop ( Register Reg,
MachineBasicBlock * BB,
MachineRegisterInfo & MRI )
static

Return true if the register has a use that occurs outside the specified loop.

Definition at line 359 of file ModuloSchedule.cpp.

References MRI, and Reg.

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( ModuloScheduleTest ,
"modulo-schedule-test" ,
"Modulo Schedule test pass" ,
false ,
false  )

◆ parseSymbolString()

void parseSymbolString ( StringRef S,
int & Cycle,
int & Stage )
static

Definition at line 2831 of file ModuloSchedule.cpp.

References llvm::dbgs(), llvm::getToken(), and llvm_unreachable.

◆ removePhis()

void removePhis ( MachineBasicBlock * BB,
MachineBasicBlock * Incoming )
static

Remove the incoming block from the Phis in a basic block.

Definition at line 863 of file ModuloSchedule.cpp.

References MI.

◆ replacePhiSrc()

void replacePhiSrc ( MachineInstr & Phi,
Register OrigReg,
Register NewReg,
MachineBasicBlock * NewMBB )
static

Definition at line 2479 of file ModuloSchedule.cpp.

◆ replaceRegUsesAfterLoop()

void replaceRegUsesAfterLoop ( Register FromReg,
Register ToReg,
MachineBasicBlock * MBB,
MachineRegisterInfo & MRI )
static

Replace all uses of FromReg that appear outside the specified basic block with ToReg.

Definition at line 348 of file ModuloSchedule.cpp.

References llvm::make_early_inc_range(), MBB, and MRI.

Variable Documentation

◆ false

modulo schedule Modulo Schedule test false

Definition at line 2818 of file ModuloSchedule.cpp.

◆ pass

modulo schedule Modulo Schedule test pass

Definition at line 2818 of file ModuloSchedule.cpp.

◆ SwapBranchTargetsMVE

cl::opt< bool > SwapBranchTargetsMVE("pipeliner-swap-branch-targets-mve", cl::Hidden, cl::init(false), cl::desc("Swap target blocks of a conditional branch for MVE expander")) ( "pipeliner-swap-branch-targets-mve" ,
cl::Hidden ,
cl::init(false) ,
cl::desc("Swap target blocks of a conditional branch for MVE expander")  )
static

◆ test