Changes in directory llvm/lib/CodeGen/SelectionDAG:
ScheduleDAG.cpp updated: 1.71 -> 1.72 ScheduleDAGList.cpp updated: 1.13 -> 1.14 --- Log message: When a hazard recognizer needs noops to be inserted, do so. This represents noops as null pointers in the instruction sequence. --- Diffs of the changes: (+19 -10) ScheduleDAG.cpp | 4 ++++ ScheduleDAGList.cpp | 25 +++++++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.71 llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.72 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp:1.71 Sat Feb 25 03:53:49 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp Sun Mar 5 17:51:47 2006 @@ -370,6 +370,10 @@ NI->VRBase = VRBase; } +void ScheduleDAG::EmitNoop() { + TII->insertNoop(*BB, BB->end()); +} + /// EmitAll - Emit all nodes in schedule sorted order. /// void ScheduleDAG::EmitAll() { Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp:1.13 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp:1.14 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp:1.13 Sun Mar 5 17:13:56 2006 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGList.cpp Sun Mar 5 17:51:47 2006 @@ -214,7 +214,7 @@ 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 @@ // 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 @@ /// 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"; } } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits