VLIW scheduler that builds the dependence graph used for packetizing.

Synopsis

Declared in <llvm/CodeGen/DFAPacketizer.h>

class DefaultVLIWScheduler
    : public ScheduleDAGInstrs

Description

Extends ScheduleDAGInstrs and overrides the schedule method to build the dependence graph.

Base Classes

Name

Description

ScheduleDAGInstrs

A ScheduleDAG for scheduling lists of MachineInstr.

Type Aliases

Name

Description

SUList

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

Enums

Name

Description

DumpDirection

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

Member Functions

Name

Description

DefaultVLIWScheduler [constructor]

Construct a VLIW scheduler for MF.

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

DefaultVLIWScheduler takes ownership of the Mutation object.

addSchedBarrierDeps

Adds dependencies from region instructions to the scheduling barrier.

begin

Returns an iterator to the top of the current scheduling region.

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).

doMBBSchedRegionsTopDown [virtual]

Returns true if MBB scheduling regions should be handled top‐down.

dump [virtual]

Dumps the scheduling DAG for debugging.

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]

Initializes DAG and scheduler state for a new scheduling region.

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]

Cleans up after scheduling in the given block.

fixupKills

Fixes register kill flags that scheduling has made invalid.

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.

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.

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.

newSUnit

Creates a new SUnit and return a ptr to it.

schedule [virtual]

Build the dependence graph for the current scheduling region.

setDumpDirection

Sets the direction used when dumping the scheduled sequence.

shouldScheduleSingleMIRegions

Whether regions with a single MI should be scheduled.

startBlock [virtual]

Prepares to perform scheduling in the given block.

viewGraph

viewGraph overloads

Data Members

Name

Description

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

Name

Description

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

Name

Description

DbgValueVector

Pairs of DBG_VALUE instructions and the instructions they follow.

Protected Member Functions

Name

Description

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.

deadDefHasNoUse

Returns true if the def register in MO has no uses.

dumpNodeAll

Dump SU and all of its scheduling attributes.

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.

initSUnits

Creates an SUnit for each instruction in the current region.

postProcessDAG

Apply registered DAG mutations to the current dependence graph.

Protected Data Members

Name

Description

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.

CanHandleTerminators

True if this scheduler can safely include terminators as DAG nodes.

Clusters

Clusters of related SUnits discovered while building the DAG.

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.

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.

LiveRegs

Set of live physical registers for updating kill flags.

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.

NumRegionInstrs

Instructions in this region (distance(RegionBegin, RegionEnd)).

RegionBegin

The beginning of the range to be scheduled.

RegionEnd

The end of the range to be scheduled.

RemoveKillFlags

True if the DAG builder should remove kill flags (in preparation for rescheduling).

SchedModel

TargetSchedModel provides an interface to the machine model.

ScheduleSingleMIRegions

True if regions with a single MI should be scheduled.

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.

Non-Member Functions

Name

Description

fuseInstructionPair

Fuse two scheduling units so they are scheduled back to back.

Created with MrDocs