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:

Methods

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)

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)

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()

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)

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)

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)

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)

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

llvm::MachineInstr& MI
llvm::MachineOperand& MO

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)

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)

Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:174

Parameters

llvm::MachineInstr& MI
unsigned int Count

void StartBlock(llvm::MachineBasicBlock* BB)

Description

Initialize anti-dep breaking for a new basic block.

Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:138

Parameters

llvm::MachineBasicBlock* BB

~AggressiveAntiDepBreaker()

Declared at: llvm/lib/CodeGen/AggressiveAntiDepBreaker.h:135