mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-18 12:29:21 +00:00
When a hazard recognizer needs noops to be inserted, do so. This represents
noops as null pointers in the instruction sequence. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26564 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
202bc85a95
commit
a93dfcd40a
@ -370,6 +370,10 @@ void ScheduleDAG::EmitNode(NodeInfo *NI) {
|
||||
NI->VRBase = VRBase;
|
||||
}
|
||||
|
||||
void ScheduleDAG::EmitNoop() {
|
||||
TII->insertNoop(*BB, BB->end());
|
||||
}
|
||||
|
||||
/// EmitAll - Emit all nodes in schedule sorted order.
|
||||
///
|
||||
void ScheduleDAG::EmitAll() {
|
||||
|
@ -214,7 +214,7 @@ class ScheduleDAGList : public ScheduleDAG {
|
||||
private:
|
||||
// SDNode to SUnit mapping (many to one).
|
||||
std::map<SDNode*, SUnit*> SUnitMap;
|
||||
// The schedule.
|
||||
// The schedule. Null SUnit*'s represend noop instructions.
|
||||
std::vector<SUnit*> Sequence;
|
||||
// Current scheduling cycle.
|
||||
unsigned CurrCycle;
|
||||
@ -523,7 +523,7 @@ void ScheduleDAGList::ListScheduleTopDown() {
|
||||
// processors without pipeline interlocks and other cases.
|
||||
DEBUG(std::cerr << "*** Emitting noop");
|
||||
HazardRec->EmitNoop();
|
||||
// FIXME: Add a noop to the schedule!!
|
||||
Sequence.push_back(0); // NULL SUnit -> noop
|
||||
++NumNoops;
|
||||
}
|
||||
}
|
||||
@ -688,21 +688,26 @@ void ScheduleDAGList::BuildSchedUnits() {
|
||||
/// EmitSchedule - Emit the machine code in scheduled order.
|
||||
void ScheduleDAGList::EmitSchedule() {
|
||||
for (unsigned i = 0, e = Sequence.size(); i != e; i++) {
|
||||
SDNode *N;
|
||||
SUnit *SU = Sequence[i];
|
||||
for (unsigned j = 0, ee = SU->FlaggedNodes.size(); j != ee; j++) {
|
||||
N = SU->FlaggedNodes[j];
|
||||
EmitNode(getNI(N));
|
||||
if (SUnit *SU = Sequence[i]) {
|
||||
for (unsigned j = 0, ee = SU->FlaggedNodes.size(); j != ee; j++) {
|
||||
SDNode *N = SU->FlaggedNodes[j];
|
||||
EmitNode(getNI(N));
|
||||
}
|
||||
EmitNode(getNI(SU->Node));
|
||||
} else {
|
||||
// Null SUnit* is a noop.
|
||||
EmitNoop();
|
||||
}
|
||||
EmitNode(getNI(SU->Node));
|
||||
}
|
||||
}
|
||||
|
||||
/// dump - dump the schedule.
|
||||
void ScheduleDAGList::dump() const {
|
||||
for (unsigned i = 0, e = Sequence.size(); i != e; i++) {
|
||||
SUnit *SU = Sequence[i];
|
||||
SU->dump(&DAG, false);
|
||||
if (SUnit *SU = Sequence[i])
|
||||
SU->dump(&DAG, false);
|
||||
else
|
||||
std::cerr << "**** NOOP ****\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user