23#define DEBUG_TYPE "machine-scheduler"
31 if (QII->mayBeCurLoad(*SUd->
getInstr()))
58 if (QII.mayBeCurLoad(*
MI)) {
60 Top.ResourceModel->isResourceAvailable(SU,
true)) {
64 Bot.ResourceModel->isResourceAvailable(SU,
false)) {
74 if (QII.isNewStorePseudo(*
MI)) {
76 }
else if (!QII.isTmpLoadPseudo(*
MI)) {
80 QII.isTmpLoadPseudo(*Pred->getInstr()) && Pred->NumSuccs < 3)
85 if (QII.isTmpLoadPseudo(*
MI) && SU->
NumSuccs < 3) {
87 }
else if (!QII.isNewStorePseudo(*
MI)) {
91 QII.isNewStorePseudo(*Succ->
getInstr()))
VLIWMachineScheduler * DAG
static constexpr unsigned PriorityOne
static constexpr unsigned PriorityTwo
const TargetSchedModel * SchedModel
virtual int SchedulingCost(ReadyQueue &Q, SUnit *SU, SchedCandidate &Candidate, RegPressureDelta &Delta, bool verbose)
Single point to compute overall scheduling cost.
VLIWResourceModel * createVLIWResourceModel(const TargetSubtargetInfo &STI, const TargetSchedModel *SchedModel) const override
int SchedulingCost(ReadyQueue &Q, SUnit *SU, SchedCandidate &Candidate, RegPressureDelta &Delta, bool verbose) override
Single point to compute overall scheduling cost.
const HexagonInstrInfo * getInstrInfo() const override
bool hasDependence(const SUnit *SUd, const SUnit *SUu) override
Return true if there is a dependence between SUd and SUu.
Representation of each machine instruction.
Helpers for implementing custom MachineSchedStrategy classes.
Kind getKind() const
Returns an enum value representing the kind of the dependence.
@ Data
Regular data dependence (aka true-dependence).
Scheduling unit. This is a node in the scheduling DAG.
bool isInstr() const
Returns true if this SUnit refers to a machine instruction as opposed to an SDNode.
bool isScheduled
True once scheduled.
SmallVector< SDep, 4 > Succs
All sunit successors.
SmallVector< SDep, 4 > Preds
All sunit predecessors.
MachineInstr * getInstr() const
Returns the representative MachineInstr for this SUnit.
Provide an instruction scheduling machine model to CodeGen passes.
TargetSubtargetInfo - Generic base class for all target subtargets.
virtual bool hasDependence(const SUnit *SUd, const SUnit *SUu)
Return true if there is a dependence between SUd and SUu.
const TargetInstrInfo * TII
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Store the state used by ConvergingVLIWScheduler heuristics, required for the lifetime of one invocati...
Store the effects of a change in pressure on things that MI scheduler cares about.