LLVM 22.0.0git
Public Types | Public Member Functions | Public Attributes | List of all members
llvm::LoopCarriedEdges Struct Reference

Represents loop-carried dependencies. More...

#include "llvm/CodeGen/MachinePipeliner.h"

Public Types

using OrderDep = SmallSetVector< SUnit *, 8 >
 
using OrderDepsType = DenseMap< SUnit *, OrderDep >
 

Public Member Functions

const OrderDepgetOrderDepOrNull (SUnit *Key) const
 
void modifySUnits (std::vector< SUnit > &SUnits, const TargetInstrInfo *TII)
 Adds some edges to the original DAG that correspond to loop-carried dependencies.
 
void dump (SUnit *SU, const TargetRegisterInfo *TRI, const MachineRegisterInfo *MRI) const
 

Public Attributes

OrderDepsType OrderDeps
 

Detailed Description

Represents loop-carried dependencies.

Because SwingSchedulerDAG doesn't assume cycle dependencies as the name suggests, such dependencies must be handled separately. After DAG construction is finished, these dependencies are added to SwingSchedulerDDG. TODO: Also handle output-dependencies introduced by physical registers.

Definition at line 205 of file MachinePipeliner.h.

Member Typedef Documentation

◆ OrderDep

Definition at line 206 of file MachinePipeliner.h.

◆ OrderDepsType

Definition at line 207 of file MachinePipeliner.h.

Member Function Documentation

◆ dump()

void LoopCarriedEdges::dump ( SUnit SU,
const TargetRegisterInfo TRI,
const MachineRegisterInfo MRI 
) const

◆ getOrderDepOrNull()

const OrderDep * llvm::LoopCarriedEdges::getOrderDepOrNull ( SUnit Key) const
inline

◆ modifySUnits()

void LoopCarriedEdges::modifySUnits ( std::vector< SUnit > &  SUnits,
const TargetInstrInfo TII 
)

Adds some edges to the original DAG that correspond to loop-carried dependencies.

Historically, loop-carried edges are represented by using non-loop-carried edges in the original DAG. This function appends such edges to preserve the previous behavior.

Definition at line 4248 of file MachinePipeliner.cpp.

References llvm::SUnit::addPred(), llvm::SDep::Barrier, From, llvm::SUnit::getInstr(), getOrderDepOrNull(), isSuccOrder(), llvm::MachineInstr::mayLoad(), llvm::MachineInstr::mayStore(), llvm::SUnit::NodeNum, llvm::SDep::setLatency(), llvm::SDep::setSUnit(), std::swap(), and TII.

Member Data Documentation

◆ OrderDeps

OrderDepsType llvm::LoopCarriedEdges::OrderDeps

Definition at line 209 of file MachinePipeliner.h.

Referenced by getOrderDepOrNull().


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