class AggressiveAntiDepBreaker
Declaration
class AggressiveAntiDepBreaker : public AntiDepBreaker { /* full declaration omitted */ };
Description
This class works in conjunction with the post-RA scheduler to rename registers to break register anti-dependencies (WAR hazards).
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:116
Inherits from: AntiDepBreaker
Member Variables
- private llvm::MachineFunction& MF
- private llvm::MachineRegisterInfo& MRI
- private const llvm::TargetInstrInfo* TII
- private const llvm::TargetRegisterInfo* TRI
- private const llvm::RegisterClassInfo& RegClassInfo
- private llvm::BitVector CriticalPathSet
- The set of registers that should only be renamed if they are on the critical path.
- private llvm::AggressiveAntiDepState* State = nullptr
- The state used to identify and rename anti-dependence registers.
Method Overview
- public AggressiveAntiDepBreaker(llvm::MachineFunction & MFi, const llvm::RegisterClassInfo & RCI, TargetSubtargetInfo::RegClassVector & CriticalPathRCs)
- public unsigned int BreakAntiDependencies(const std::vector<SUnit> & SUnits, MachineBasicBlock::iterator Begin, MachineBasicBlock::iterator End, unsigned int InsertPosIndex, llvm::AntiDepBreaker::DbgValueVector & DbgValues)
- private bool FindSuitableFreeRegisters(unsigned int AntiDepGroupIndex, llvm::AggressiveAntiDepBreaker::RenameOrderType & RenameOrder, std::map<unsigned int, unsigned int> & RenameMap)
- public void FinishBlock()
- private void GetPassthruRegs(llvm::MachineInstr & MI, std::set<unsigned int> & PassthruRegs)
- private llvm::BitVector GetRenameRegisters(unsigned int Reg)
- private void HandleLastUse(unsigned int Reg, unsigned int KillIdx, const char * tag, const char * header = nullptr, const char * footer = nullptr)
- private bool IsImplicitDefUse(llvm::MachineInstr & MI, llvm::MachineOperand & MO)
- public void Observe(llvm::MachineInstr & MI, unsigned int Count, unsigned int InsertPosIndex)
- private void PrescanInstruction(llvm::MachineInstr & MI, unsigned int Count, std::set<unsigned int> & PassthruRegs)
- private void ScanInstruction(llvm::MachineInstr & MI, unsigned int Count)
- public void StartBlock(llvm::MachineBasicBlock * BB)
- public ~AggressiveAntiDepBreaker()
Inherited from AntiDepBreaker:
- public BreakAntiDependencies
- public FinishBlock
- public Observe
- public StartBlock
- public UpdateDbgValue
- public UpdateDbgValues
Methods
¶AggressiveAntiDepBreaker(
llvm::MachineFunction& MFi,
const llvm::RegisterClassInfo& RCI,
TargetSubtargetInfo::RegClassVector&
CriticalPathRCs)
AggressiveAntiDepBreaker(
llvm::MachineFunction& MFi,
const llvm::RegisterClassInfo& RCI,
TargetSubtargetInfo::RegClassVector&
CriticalPathRCs)
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:132
Parameters
- llvm::MachineFunction& MFi
- const llvm::RegisterClassInfo& RCI
- TargetSubtargetInfo::RegClassVector& CriticalPathRCs
¶unsigned int BreakAntiDependencies(
const std::vector<SUnit>& SUnits,
MachineBasicBlock::iterator Begin,
MachineBasicBlock::iterator End,
unsigned int InsertPosIndex,
llvm::AntiDepBreaker::DbgValueVector&
DbgValues)
unsigned int BreakAntiDependencies(
const std::vector<SUnit>& SUnits,
MachineBasicBlock::iterator Begin,
MachineBasicBlock::iterator End,
unsigned int InsertPosIndex,
llvm::AntiDepBreaker::DbgValueVector&
DbgValues)
Description
Identifiy anti-dependencies along the critical path of the ScheduleDAG and break them by renaming registers.
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:142
Parameters
- const std::vector<SUnit>& SUnits
- MachineBasicBlock::iterator Begin
- MachineBasicBlock::iterator End
- unsigned int InsertPosIndex
- llvm::AntiDepBreaker::DbgValueVector& DbgValues
¶bool FindSuitableFreeRegisters(
unsigned int AntiDepGroupIndex,
llvm::AggressiveAntiDepBreaker::
RenameOrderType& RenameOrder,
std::map<unsigned int, unsigned int>&
RenameMap)
bool FindSuitableFreeRegisters(
unsigned int AntiDepGroupIndex,
llvm::AggressiveAntiDepBreaker::
RenameOrderType& RenameOrder,
std::map<unsigned int, unsigned int>&
RenameMap)
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:176
Parameters
- unsigned int AntiDepGroupIndex
- llvm::AggressiveAntiDepBreaker::RenameOrderType& RenameOrder
- std::map<unsigned int, unsigned int>& RenameMap
¶void FinishBlock()
void FinishBlock()
Description
Finish anti-dep breaking for a basic block.
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:154
¶void GetPassthruRegs(
llvm::MachineInstr& MI,
std::set<unsigned int>& PassthruRegs)
void GetPassthruRegs(
llvm::MachineInstr& MI,
std::set<unsigned int>& PassthruRegs)
Description
If MI implicitly def/uses a register, then return that register and all subregisters.
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:166
Parameters
- llvm::MachineInstr& MI
- std::set<unsigned int>& PassthruRegs
¶llvm::BitVector GetRenameRegisters(
unsigned int Reg)
llvm::BitVector GetRenameRegisters(
unsigned int Reg)
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:175
Parameters
- unsigned int Reg
¶void HandleLastUse(unsigned int Reg,
unsigned int KillIdx,
const char* tag,
const char* header = nullptr,
const char* footer = nullptr)
void HandleLastUse(unsigned int Reg,
unsigned int KillIdx,
const char* tag,
const char* header = nullptr,
const char* footer = nullptr)
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:168
Parameters
- unsigned int Reg
- unsigned int KillIdx
- const char* tag
- const char* header = nullptr
- const char* footer = nullptr
¶bool IsImplicitDefUse(llvm::MachineInstr& MI,
llvm::MachineOperand& MO)
bool IsImplicitDefUse(llvm::MachineInstr& MI,
llvm::MachineOperand& MO)
Description
Return true if MO represents a register that is both implicitly used and defined in MI
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:162
Parameters
¶void Observe(llvm::MachineInstr& MI,
unsigned int Count,
unsigned int InsertPosIndex)
void Observe(llvm::MachineInstr& MI,
unsigned int Count,
unsigned int InsertPosIndex)
Description
Update liveness information to account for the current instruction, which will not be scheduled.
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:150
Parameters
- llvm::MachineInstr& MI
- unsigned int Count
- unsigned int InsertPosIndex
¶void PrescanInstruction(
llvm::MachineInstr& MI,
unsigned int Count,
std::set<unsigned int>& PassthruRegs)
void PrescanInstruction(
llvm::MachineInstr& MI,
unsigned int Count,
std::set<unsigned int>& PassthruRegs)
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:172
Parameters
- llvm::MachineInstr& MI
- unsigned int Count
- std::set<unsigned int>& PassthruRegs
¶void ScanInstruction(llvm::MachineInstr& MI,
unsigned int Count)
void ScanInstruction(llvm::MachineInstr& MI,
unsigned int Count)
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:174
Parameters
- llvm::MachineInstr& MI
- unsigned int Count
¶void StartBlock(llvm::MachineBasicBlock* BB)
void StartBlock(llvm::MachineBasicBlock* BB)
Description
Initialize anti-dep breaking for a new basic block.
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:138
Parameters
¶~AggressiveAntiDepBreaker()
~AggressiveAntiDepBreaker()
Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:135