LLVM 22.0.0git
llvm::AntiDepBreaker Class Referenceabstract

This class works in conjunction with the post-RA scheduler to rename registers to break register anti-dependencies (WAR hazards). More...

#include "llvm/CodeGen/AntiDepBreaker.h"

Inheritance diagram for llvm::AntiDepBreaker:
[legend]

Public Types

using DbgValueVector

Public Member Functions

virtual ~AntiDepBreaker ()
virtual void StartBlock (MachineBasicBlock *BB)=0
 Initialize anti-dep breaking for a new basic block.
virtual unsigned BreakAntiDependencies (const std::vector< SUnit > &SUnits, MachineBasicBlock::iterator Begin, MachineBasicBlock::iterator End, unsigned InsertPosIndex, DbgValueVector &DbgValues)=0
 Identifiy anti-dependencies within a basic-block region and break them by renaming registers.
virtual void Observe (MachineInstr &MI, unsigned Count, unsigned InsertPosIndex)=0
 Update liveness information to account for the current instruction, which will not be scheduled.
virtual void FinishBlock ()=0
 Finish anti-dep breaking for a basic block.
void UpdateDbgValue (MachineInstr &MI, MCRegister OldReg, MCRegister NewReg)
 Update DBG_VALUE or DBG_PHI if dependency breaker is updating other machine instruction to use NewReg.
void UpdateDbgValues (const DbgValueVector &DbgValues, MachineInstr *ParentMI, MCRegister OldReg, MCRegister NewReg)
 Update all DBG_VALUE instructions that may be affected by the dependency breaker's update of ParentMI to use NewReg.

Detailed Description

This class works in conjunction with the post-RA scheduler to rename registers to break register anti-dependencies (WAR hazards).

Definition at line 31 of file AntiDepBreaker.h.

Member Typedef Documentation

◆ DbgValueVector

Initial value:
std::vector<std::pair<MachineInstr *, MachineInstr *>>

Definition at line 33 of file AntiDepBreaker.h.

Constructor & Destructor Documentation

◆ ~AntiDepBreaker()

AntiDepBreaker::~AntiDepBreaker ( )
virtualdefault

Member Function Documentation

◆ BreakAntiDependencies()

virtual unsigned llvm::AntiDepBreaker::BreakAntiDependencies ( const std::vector< SUnit > & SUnits,
MachineBasicBlock::iterator Begin,
MachineBasicBlock::iterator End,
unsigned InsertPosIndex,
DbgValueVector & DbgValues )
pure virtual

Identifiy anti-dependencies within a basic-block region and break them by renaming registers.

Return the number of anti-dependencies broken.

Implemented in llvm::AggressiveAntiDepBreaker, and llvm::CriticalAntiDepBreaker.

◆ FinishBlock()

virtual void llvm::AntiDepBreaker::FinishBlock ( )
pure virtual

Finish anti-dep breaking for a basic block.

Implemented in llvm::AggressiveAntiDepBreaker, and llvm::CriticalAntiDepBreaker.

◆ Observe()

virtual void llvm::AntiDepBreaker::Observe ( MachineInstr & MI,
unsigned Count,
unsigned InsertPosIndex )
pure virtual

Update liveness information to account for the current instruction, which will not be scheduled.

Implemented in llvm::AggressiveAntiDepBreaker, and llvm::CriticalAntiDepBreaker.

References llvm::Count, and MI.

◆ StartBlock()

virtual void llvm::AntiDepBreaker::StartBlock ( MachineBasicBlock * BB)
pure virtual

Initialize anti-dep breaking for a new basic block.

Implemented in llvm::AggressiveAntiDepBreaker, and llvm::CriticalAntiDepBreaker.

◆ UpdateDbgValue()

void llvm::AntiDepBreaker::UpdateDbgValue ( MachineInstr & MI,
MCRegister OldReg,
MCRegister NewReg )
inline

Update DBG_VALUE or DBG_PHI if dependency breaker is updating other machine instruction to use NewReg.

Definition at line 59 of file AntiDepBreaker.h.

References llvm_unreachable, and MI.

Referenced by UpdateDbgValues().

◆ UpdateDbgValues()

void llvm::AntiDepBreaker::UpdateDbgValues ( const DbgValueVector & DbgValues,
MachineInstr * ParentMI,
MCRegister OldReg,
MCRegister NewReg )
inline

Update all DBG_VALUE instructions that may be affected by the dependency breaker's update of ParentMI to use NewReg.

Definition at line 75 of file AntiDepBreaker.h.

References llvm::make_range(), and UpdateDbgValue().

Referenced by llvm::AggressiveAntiDepBreaker::BreakAntiDependencies(), and llvm::CriticalAntiDepBreaker::BreakAntiDependencies().


The documentation for this class was generated from the following files: