llvm::ScheduleDAGMILive

ScheduleDAG that tracks live intervals and register pressure.

Synopsis

Declared in <llvm/CodeGen/MachineScheduler.h>

class ScheduleDAGMILive
    : public ScheduleDAGMI

Base Classes

NameDescription
ScheduleDAGMIScheduleDAG that schedules according to a MachineSchedStrategy.

Type Aliases

NameDescription
SUList List of SUnits associated with a memory value during DAG construction.

Enums

NameDescription
DumpDirection The direction that should be used to dump the scheduled Sequence.

Member Functions

NameDescription
ScheduleDAGMILive [constructor]Construct a live schedule DAG for context C using strategy S.
~ScheduleDAGMILive [destructor] [virtual]Destroy the live schedule DAG and owned DFS result.
operator= [deleted]Copy assignment is deleted; ScheduleDAG is passed by reference only.
IsReachable IsReachable - Checks if SU is reachable from TargetSU.
VerifyScheduledDAG Verifies that all SUnits were scheduled and that their state is consistent. Returns the number of scheduled SUnits.
addCustomGraphFeatures [virtual]Adds custom features for a visualization of the ScheduleDAG.
addEdge Add a DAG edge to the given SU with the given predecessor dependence data.
addMutation Add a postprocessing step to the DAG builder.
addSchedBarrierDeps Adds dependencies from region instructions to the scheduling barrier.
begin Returns an iterator to the top of the current scheduling region.
bottom Return an iterator to the bottom of the unscheduled zone.
buildSchedGraph Builds SUnits for the current scheduling region.
canAddEdge True if an edge can be added from PredSU to SuccSU without creating a cycle.
clearDAG Clears the DAG state (between regions).
computeCyclicCriticalPath Compute the cyclic critical path through the DAG.
computeDFSResult Compute a DFSResult after DAG building is complete, and before any queue comparisons.
doMBBSchedRegionsTopDown [virtual]Return true to process MBB scheduling regions top-down.
dump [virtual]Dump the live schedule DAG to the debug stream.
dumpNode [virtual]Dumps a single scheduling unit for debugging.
dumpNodeName Dump the printable name of SU.
end Returns an iterator to the bottom of the current scheduling region.
enterRegion [virtual]Prepare the next scheduling region within a basic block.
exitRegion [virtual]Called when the scheduler has finished scheduling the current region.
finalizeSchedule [virtual]Allow targets to perform final scheduling actions at the level of the whole MachineFunction. By default does nothing.
finishBlock [virtual]Finish scheduling for the current basic block.
fixupKills Fixes register kill flags that scheduling has made invalid.
getBotPressure Get current register pressure for the bottom scheduled instructions.
getBotRPTracker Return the pressure tracker for the bottom scheduled boundary.
getCluster Get the specific cluster, return nullptr for InvalidClusterId.
getClusters Returns the array of the clusters.
getDAGName [virtual]Returns a label for the region of code covered by the DAG.
getDFSResult Return a non-null DFS result if the scheduling strategy initialized it.
getGraphNodeLabel [virtual]Returns a label for a DAG node that points to an instruction.
getInstrDesc Returns the MCInstrDesc of this SUnit. Returns NULL for SDNodes without a machine opcode.
getLIS Return the LiveIntervals instance for use in DAG mutators and such.
getPressureDiff getPressureDiff overloads
getRegPressure Get register pressure for the entire scheduling region before scheduling.
getRegionCriticalPSets Return pressure sets that were critical before scheduling.
getSUnit Returns an existing SUnit for this MI, or nullptr.
getSchedClass Resolves and cache a resolved scheduling class for an SUnit.
getSchedModel Gets the machine model for instruction scheduling.
getScheduledTrees Return the bitmask of scheduled DAG subtrees.
getTopPressure Get current register pressure for the top scheduled instructions.
getTopRPTracker Return the pressure tracker for the top scheduled boundary.
hasVRegLiveness [virtual]Return true if this DAG supports VReg liveness and RegPressure.
isTrackingPressure Return true if register pressure tracking is enabled.
moveInstruction Change the position of an instruction within the basic block and update live ranges and region boundary iterators.
newSUnit Creates a new SUnit and return a ptr to it.
schedule [virtual]Implement ScheduleDAGInstrs interface for scheduling a sequence of reorderable instructions.
setDumpDirection Sets the direction used when dumping the scheduled sequence.
shouldScheduleSingleMIRegions Whether regions with a single MI should be scheduled.
startBlock startBlock overloads
top Return an iterator to the top of the unscheduled zone.
viewGraph viewGraph overloads

Data Members

NameDescription
EntrySU Special node for the region entry.
ExitSU Special node for the region exit.
MF Machine function
MRI Virtual/real register map
SUnits The scheduling units.
StressSched When true, stress-test the scheduler.
TII Target instruction information
TM Target processor
TRI Target processor register info

Protected Types

NameDescription
Value2SUsMap A map from ValueType to SUList, used during DAG construction, as a means of remembering which SUs depend on which memory locations.

Protected Type Aliases

NameDescription
DbgValueVector Pairs of DBG_VALUE instructions and the instructions they follow.

Protected Member Functions

NameDescription
addBarrierChain Adds barrier-chain edges from all SUs in map, then clears the map.
addChainDependencies addChainDependencies overloads
addChainDependency Adds a chain edge between SUa and SUb, but only if both AAResults and Target fail to deny the dependency.
addPhysRegDataDeps Adds data dependencies for the physical-register operand at OperIdx.
addPhysRegDeps Adds all physical-register dependencies for the operand at OperIdx.
addVRegDefDeps Adds virtual-register definition dependencies for the operand at OperIdx.
addVRegUseDeps Adds virtual-register use dependencies for the operand at OperIdx.
buildDAGWithRegPressure Build the schedule DAG with register pressure tracking enabled.
checkSchedLimit Return false if the misched-cutoff limit has been reached.
collectVRegUses Record virtual-register uses of SU in the current region.
deadDefHasNoUse Returns true if the def register in MO has no uses.
dumpNodeAll Dump SU and all of its scheduling attributes.
dumpSchedule dump the scheduled Sequence.
dumpScheduleTraceBottomUp Print an execution trace of the schedule bottom-up.
dumpScheduleTraceTopDown Print execution trace of the schedule top-down or bottom-up.
findRootsAndBiasEdges Find top/bottom roots and bias weak edges before queue setup.
getAAForDep Returns a (possibly null) pointer to the current BatchAAResults.
getLaneMaskForMO Returns a mask for which lanes get read/written by the given (register) machine operand.
initQueues Release ExitSU predecessors and setup scheduler queues.
initRegPressure Initialize register pressure trackers for the current region.
initSUnits Creates an SUnit for each instruction in the current region.
placeDebugValues Reinsert debug_values recorded in ScheduleDAGInstrs::DbgValues.
postProcessDAG Apply each ScheduleDAGMutation step in order. This allows different instances of ScheduleDAGMI to perform custom DAG postprocessing.
releasePred Release predecessor edge PredEdge of SU after scheduling.
releasePredecessors Release all predecessors of SU after it is scheduled.
releaseSucc Release successor edge SuccEdge of SU after scheduling.
releaseSuccessors Release all successors of SU after it is scheduled.
scheduleMI Move an instruction and update register pressure.
updatePressureDiffs Update pressure diffs for the given live uses.
updateQueues Update scheduler DAG and queues after scheduling an instruction.
updateScheduledPressure Update scheduled pressure after placing SU.

Protected Data Members

NameDescription
AA Alias analysis used while building memory dependencies.
AAForDep Optional batch alias-analysis results used while adding memory deps.
BB The block in which to insert instructions
BarrierChain Generic side-effecting instruction that acts as a scheduling barrier.
BotPressure The bottom of the unscheduled zone.
BotRPTracker Pressure tracker for instructions scheduled from the bottom.
CanHandleTerminators True if this scheduler can safely include terminators as DAG nodes.
Clusters Clusters of related SUnits discovered while building the DAG.
CurrentBottom The bottom of the unscheduled zone.
CurrentTop The top of the unscheduled zone.
CurrentVRegDefs Tracks the last instruction(s) in this region defining each virtual register. There may be multiple current definitions for a register with disjunct lanemasks.
CurrentVRegUses Tracks the last instructions in this region using each virtual register.
DFSResult Information about DAG subtrees. If DFSResult is NULL, then SchedulerTrees will be empty.
DbgValues Remember instruction that precedes DBG_VALUE. These are generated by buildSchedGraph but persist so they can be referenced when emitting the final schedule.
Defs Map from register units to SUnits that define them in the current walk.
DumpDir Direction used when dumping the schedule.
FirstDbgValue First DBG_VALUE instruction preceding the scheduled region, if any.
LIS Live intervals used by DAG mutations and pressure tracking.
LiveRegionEnd End of the live scheduling region used for pressure tracking.
LiveRegs Set of live physical registers for updating kill flags.
MBFI Block frequencies used by scheduling heuristics.
MFI Frame information for the function.
MISUnitMap After calling BuildSchedGraph, each machine instruction in the current scheduling region is mapped to an SUnit.
MLI Loop information for the function.
MemOpsProcessed Number of memory operations processed while building the DAG.
Mutations Ordered list of DAG postprocessing steps.
NumRegionInstrs Instructions in this region (distance(RegionBegin, RegionEnd)).
RPTracker Tracker covering pressure for the entire DAG region.
RegClassInfo Cached register-class information for pressure heuristics.
RegPressure Register pressure for the entire scheduling region before scheduling.
RegionBegin The beginning of the range to be scheduled.
RegionCriticalPSets Pressure sets that already exceed the target limit before scheduling.
RegionEnd The end of the range to be scheduled.
RemoveKillFlags True if the DAG builder should remove kill flags (in preparation for rescheduling).
SUPressureDiffs Per-SUnit pressure-change summaries used during bottom-up scheduling.
SchedImpl Strategy that selects the next node to schedule.
SchedModel TargetSchedModel provides an interface to the machine model.
ScheduleSingleMIRegions True if regions with a single MI should be scheduled.
ScheduledTrees Bitmask of DAG subtrees that have already been scheduled.
ShouldTrackLaneMasks Whether lane masks are tracked for independent subregister writes.
ShouldTrackPressure Register pressure in this region computed by initRegPressure.
TopPressure The top of the unscheduled zone.
TopRPTracker Pressure tracker for instructions scheduled from the top.
Topo Topo - A topological ordering for SUnits which permits fast IsReachable and similar queries.
TrackLaneMasks Whether lane masks should get tracked.
UnknownValue For an unanalyzable memory access, this Value is used in maps.
Uses Map from register units to SUnits that use them in the current walk.
VRegUses Maps vregs to the SUnits of their uses in the current scheduling region.

Non-Member Functions

NameDescription
createSchedLiveCreate the standard converging machine scheduler. This will be used as the default scheduler if the target does not set a default. Adds default DAG mutations.
fuseInstructionPairFuse two scheduling units so they are scheduled back to back.

Derived Classes

NameDescription
VLIWMachineScheduler Extend the standard ScheduleDAGMILive to provide more context and override the top-level schedule() driver.