LLVM 20.0.0git
Public Member Functions | List of all members
llvm::MachineTraceMetrics::Trace Class Reference

A trace represents a plausible sequence of executed basic blocks that passes through the current basic block one. More...

#include "llvm/CodeGen/MachineTraceMetrics.h"

Public Member Functions

 Trace (Ensemble &te, TraceBlockInfo &tbi)
 
void print (raw_ostream &) const
 
void dump () const
 
unsigned getInstrCount () const
 Compute the total number of instructions in the trace.
 
unsigned getResourceDepth (bool Bottom) const
 Return the resource depth of the top/bottom of the trace center block.
 
unsigned getResourceLength (ArrayRef< const MachineBasicBlock * > Extrablocks={}, ArrayRef< const MCSchedClassDesc * > ExtraInstrs={}, ArrayRef< const MCSchedClassDesc * > RemoveInstrs={}) const
 Return the resource length of the trace.
 
unsigned getCriticalPath () const
 Return the length of the (data dependency) critical path through the trace.
 
InstrCycles getInstrCycles (const MachineInstr &MI) const
 Return the depth and height of MI.
 
unsigned getInstrSlack (const MachineInstr &MI) const
 Return the slack of MI.
 
unsigned getPHIDepth (const MachineInstr &PHI) const
 Return the Depth of a PHI instruction in a trace center block successor.
 
bool isDepInTrace (const MachineInstr &DefMI, const MachineInstr &UseMI) const
 A dependence is useful if the basic block of the defining instruction is part of the trace of the user instruction.
 

Detailed Description

A trace represents a plausible sequence of executed basic blocks that passes through the current basic block one.

The Trace class serves as a handle to internal cached data structures.

Definition at line 272 of file MachineTraceMetrics.h.

Constructor & Destructor Documentation

◆ Trace()

llvm::MachineTraceMetrics::Trace::Trace ( Ensemble te,
TraceBlockInfo tbi 
)
inlineexplicit

Definition at line 279 of file MachineTraceMetrics.h.

Member Function Documentation

◆ dump()

void llvm::MachineTraceMetrics::Trace::dump ( ) const
inline

Definition at line 282 of file MachineTraceMetrics.h.

References llvm::dbgs(), and print().

◆ getCriticalPath()

unsigned llvm::MachineTraceMetrics::Trace::getCriticalPath ( ) const
inline

Return the length of the (data dependency) critical path through the trace.

Definition at line 311 of file MachineTraceMetrics.h.

References llvm::MachineTraceMetrics::TraceBlockInfo::CriticalPath.

◆ getInstrCount()

unsigned llvm::MachineTraceMetrics::Trace::getInstrCount ( ) const
inline

Compute the total number of instructions in the trace.

Definition at line 285 of file MachineTraceMetrics.h.

References llvm::MachineTraceMetrics::TraceBlockInfo::InstrDepth, and llvm::MachineTraceMetrics::TraceBlockInfo::InstrHeight.

◆ getInstrCycles()

InstrCycles llvm::MachineTraceMetrics::Trace::getInstrCycles ( const MachineInstr MI) const
inline

Return the depth and height of MI.

The depth is only valid for instructions in or above the trace center block. The height is only valid for instructions in or below the trace center block.

Definition at line 316 of file MachineTraceMetrics.h.

References MI.

◆ getInstrSlack()

unsigned MachineTraceMetrics::Trace::getInstrSlack ( const MachineInstr MI) const

Return the slack of MI.

This is the number of cycles MI can be delayed before the critical path becomes longer. MI must be an instruction in the trace center block.

Definition at line 1207 of file MachineTraceMetrics.cpp.

References assert(), llvm::MachineTraceMetrics::InstrCycles::Depth, llvm::MachineTraceMetrics::InstrCycles::Height, and MI.

◆ getPHIDepth()

unsigned MachineTraceMetrics::Trace::getPHIDepth ( const MachineInstr PHI) const

Return the Depth of a PHI instruction in a trace center block successor.

The PHI does not have to be part of the trace.

Definition at line 1215 of file MachineTraceMetrics.cpp.

References assert(), llvm::SmallVectorTemplateCommon< T, typename >::front(), getPHIDeps(), MBB, PHI, and llvm::SmallVectorBase< Size_T >::size().

◆ getResourceDepth()

unsigned MachineTraceMetrics::Trace::getResourceDepth ( bool  Bottom) const

Return the resource depth of the top/bottom of the trace center block.

When bottom is set include instructions in current block in estimate.

This is the number of cycles required to execute all instructions from the trace head to the trace center block. The resource depth only considers execution resources, it ignores data dependencies. When Bottom is set, instructions in the trace center block are included.

All instructions before current block

Definition at line 1230 of file MachineTraceMetrics.cpp.

References llvm::ArrayRef< T >::size().

◆ getResourceLength()

unsigned MachineTraceMetrics::Trace::getResourceLength ( ArrayRef< const MachineBasicBlock * >  Extrablocks = {},
ArrayRef< const MCSchedClassDesc * >  ExtraInstrs = {},
ArrayRef< const MCSchedClassDesc * >  RemoveInstrs = {} 
) const

Return the resource length of the trace.

This is the number of cycles required to execute the instructions in the trace if they were all independent, exposing the maximum instruction-level parallelism.

Any blocks in Extrablocks are included as if they were part of the trace. Likewise, extra resources required by the specified scheduling classes are included. For the caller to account for extra machine instructions, it must first resolve each instruction's scheduling class.

Definition at line 1257 of file MachineTraceMetrics.cpp.

References llvm::MachineBasicBlock::getNumber(), MBB, and llvm::ArrayRef< T >::size().

◆ isDepInTrace()

bool MachineTraceMetrics::Trace::isDepInTrace ( const MachineInstr DefMI,
const MachineInstr UseMI 
) const

A dependence is useful if the basic block of the defining instruction is part of the trace of the user instruction.

It is assumed that DefMI dominates UseMI (see also isUsefulDominator).

Definition at line 1311 of file MachineTraceMetrics.cpp.

References DefMI, llvm::MachineTraceMetrics::TraceBlockInfo::isUsefulDominator(), and UseMI.

◆ print()

void MachineTraceMetrics::Trace::print ( raw_ostream OS) const

Definition at line 1359 of file MachineTraceMetrics.cpp.

References llvm::Block, OS, and llvm::printMBBReference().

Referenced by dump(), and llvm::operator<<().


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