LLVM 22.0.0git
|
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 OrderDep * | getOrderDepOrNull (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 |
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.
using llvm::LoopCarriedEdges::OrderDep = SmallSetVector<SUnit *, 8> |
Definition at line 206 of file MachinePipeliner.h.
using llvm::LoopCarriedEdges::OrderDepsType = DenseMap<SUnit *, OrderDep> |
Definition at line 207 of file MachinePipeliner.h.
void LoopCarriedEdges::dump | ( | SUnit * | SU, |
const TargetRegisterInfo * | TRI, | ||
const MachineRegisterInfo * | MRI | ||
) | const |
Definition at line 4290 of file MachinePipeliner.cpp.
References llvm::dbgs(), getOrderDepOrNull(), and llvm::SUnit::NodeNum.
Referenced by llvm::SwingSchedulerDAG::schedule().
Definition at line 211 of file MachinePipeliner.h.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), and OrderDeps.
Referenced by dump(), modifySUnits(), and llvm::SwingSchedulerDDG::SwingSchedulerDDG().
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.
OrderDepsType llvm::LoopCarriedEdges::OrderDeps |
Definition at line 209 of file MachinePipeliner.h.
Referenced by getOrderDepOrNull().