LLVM 19.0.0git
Macros | Functions | Variables
ModuloSchedule.cpp File Reference
#include "llvm/CodeGen/ModuloSchedule.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Analysis/MemoryLocation.h"
#include "llvm/CodeGen/LiveIntervals.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineLoopInfo.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/InitializePasses.h"
#include "llvm/MC/MCContext.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "pipeliner"
 

Functions

static void getPhiRegs (MachineInstr &Phi, MachineBasicBlock *Loop, unsigned &InitVal, unsigned &LoopVal)
 Return the register values for the operands of a Phi instruction.
 
static unsigned getInitPhiReg (MachineInstr &Phi, MachineBasicBlock *LoopBB)
 Return the Phi register value that comes from the incoming block.
 
static unsigned getLoopPhiReg (MachineInstr &Phi, MachineBasicBlock *LoopBB)
 Return the Phi register value that comes the loop block.
 
static void replaceRegUsesAfterLoop (unsigned FromReg, unsigned ToReg, MachineBasicBlock *MBB, MachineRegisterInfo &MRI, LiveIntervals &LIS)
 Replace all uses of FromReg that appear outside the specified basic block with ToReg.
 
static bool hasUseAfterLoop (unsigned 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.
 
 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

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

◆ getInitPhiReg()

static unsigned getInitPhiReg ( MachineInstr Phi,
MachineBasicBlock LoopBB 
)
static

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

Definition at line 52 of file ModuloSchedule.cpp.

◆ getLoopPhiReg()

static unsigned getLoopPhiReg ( MachineInstr Phi,
MachineBasicBlock LoopBB 
)
static

Return the Phi register value that comes the loop block.

Definition at line 60 of file ModuloSchedule.cpp.

◆ getPhiRegs()

static void getPhiRegs ( MachineInstr Phi,
MachineBasicBlock Loop,
unsigned InitVal,
unsigned LoopVal 
)
static

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

This function assume the instruction is a Phi.

Definition at line 36 of file ModuloSchedule.cpp.

References assert().

◆ hasUseAfterLoop()

static bool hasUseAfterLoop ( unsigned  Reg,
MachineBasicBlock BB,
MachineRegisterInfo MRI 
)
static

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

Definition at line 351 of file ModuloSchedule.cpp.

References MRI.

◆ INITIALIZE_PASS_BEGIN()

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

◆ parseSymbolString()

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

Definition at line 2152 of file ModuloSchedule.cpp.

References llvm::dbgs(), and llvm_unreachable.

◆ removePhis()

static void removePhis ( MachineBasicBlock BB,
MachineBasicBlock Incoming 
)
static

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

Definition at line 841 of file ModuloSchedule.cpp.

References MI.

◆ replaceRegUsesAfterLoop()

static void replaceRegUsesAfterLoop ( unsigned  FromReg,
unsigned  ToReg,
MachineBasicBlock MBB,
MachineRegisterInfo MRI,
LiveIntervals LIS 
)
static

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

Definition at line 337 of file ModuloSchedule.cpp.

References llvm::LiveIntervals::createEmptyInterval(), llvm::LiveIntervals::hasInterval(), llvm::make_early_inc_range(), MBB, and MRI.

Variable Documentation

◆ false

modulo schedule Modulo Schedule test false

Definition at line 2139 of file ModuloSchedule.cpp.

◆ pass

modulo schedule Modulo Schedule test pass

Definition at line 2139 of file ModuloSchedule.cpp.

Referenced by LLVMTargetMachineEmit(), and llvm::verifySafepointIR().

◆ test

modulo schedule test