[llvm-branch-commits] [llvm-branch] r80974 - /llvm/branches/Apple/Leela/lib/CodeGen/ExactHazardRecognizer.cpp
Bob Wilson
bob.wilson at apple.com
Thu Sep 3 17:14:25 PDT 2009
Author: bwilson
Date: Thu Sep 3 19:14:24 2009
New Revision: 80974
URL: http://llvm.org/viewvc/llvm-project?rev=80974&view=rev
Log:
$ svn merge -c 80962 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r80962 into '.':
U lib/CodeGen/ExactHazardRecognizer.cpp
Modified:
llvm/branches/Apple/Leela/lib/CodeGen/ExactHazardRecognizer.cpp
Modified: llvm/branches/Apple/Leela/lib/CodeGen/ExactHazardRecognizer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Leela/lib/CodeGen/ExactHazardRecognizer.cpp?rev=80974&r1=80973&r2=80974&view=diff
==============================================================================
--- llvm/branches/Apple/Leela/lib/CodeGen/ExactHazardRecognizer.cpp (original)
+++ llvm/branches/Apple/Leela/lib/CodeGen/ExactHazardRecognizer.cpp Thu Sep 3 19:14:24 2009
@@ -83,71 +83,75 @@
}
ExactHazardRecognizer::HazardType ExactHazardRecognizer::getHazardType(SUnit *SU) {
- unsigned cycle = 0;
+ if (!ItinData.isEmpty()) {
+ unsigned cycle = 0;
- // Use the itinerary for the underlying instruction to check for
- // free FU's in the scoreboard at the appropriate future cycles.
- unsigned idx = SU->getInstr()->getDesc().getSchedClass();
- for (const InstrStage *IS = ItinData.beginStage(idx),
- *E = ItinData.endStage(idx); IS != E; ++IS) {
- // We must find one of the stage's units free for every cycle the
- // stage is occupied. FIXME it would be more accurate to find the
- // same unit free in all the cycles.
- for (unsigned int i = 0; i < IS->getCycles(); ++i) {
- assert(((cycle + i) < ScoreboardDepth) &&
- "Scoreboard depth exceeded!");
-
- unsigned index = getFutureIndex(cycle + i);
- unsigned freeUnits = IS->getUnits() & ~Scoreboard[index];
- if (!freeUnits) {
- DEBUG(errs() << "*** Hazard in cycle " << (cycle + i) << ", ");
- DEBUG(errs() << "SU(" << SU->NodeNum << "): ");
- DEBUG(SU->getInstr()->dump());
- return Hazard;
+ // Use the itinerary for the underlying instruction to check for
+ // free FU's in the scoreboard at the appropriate future cycles.
+ unsigned idx = SU->getInstr()->getDesc().getSchedClass();
+ for (const InstrStage *IS = ItinData.beginStage(idx),
+ *E = ItinData.endStage(idx); IS != E; ++IS) {
+ // We must find one of the stage's units free for every cycle the
+ // stage is occupied. FIXME it would be more accurate to find the
+ // same unit free in all the cycles.
+ for (unsigned int i = 0; i < IS->getCycles(); ++i) {
+ assert(((cycle + i) < ScoreboardDepth) &&
+ "Scoreboard depth exceeded!");
+
+ unsigned index = getFutureIndex(cycle + i);
+ unsigned freeUnits = IS->getUnits() & ~Scoreboard[index];
+ if (!freeUnits) {
+ DEBUG(errs() << "*** Hazard in cycle " << (cycle + i) << ", ");
+ DEBUG(errs() << "SU(" << SU->NodeNum << "): ");
+ DEBUG(SU->getInstr()->dump());
+ return Hazard;
+ }
}
+
+ // Advance the cycle to the next stage.
+ cycle += IS->getNextCycles();
}
-
- // Advance the cycle to the next stage.
- cycle += IS->getNextCycles();
}
return NoHazard;
}
void ExactHazardRecognizer::EmitInstruction(SUnit *SU) {
- unsigned cycle = 0;
-
- // Use the itinerary for the underlying instruction to reserve FU's
- // in the scoreboard at the appropriate future cycles.
- unsigned idx = SU->getInstr()->getDesc().getSchedClass();
- for (const InstrStage *IS = ItinData.beginStage(idx),
- *E = ItinData.endStage(idx); IS != E; ++IS) {
- // We must reserve one of the stage's units for every cycle the
- // stage is occupied. FIXME it would be more accurate to reserve
- // the same unit free in all the cycles.
- for (unsigned int i = 0; i < IS->getCycles(); ++i) {
- assert(((cycle + i) < ScoreboardDepth) &&
- "Scoreboard depth exceeded!");
+ if (!ItinData.isEmpty()) {
+ unsigned cycle = 0;
- unsigned index = getFutureIndex(cycle + i);
- unsigned freeUnits = IS->getUnits() & ~Scoreboard[index];
-
- // reduce to a single unit
- unsigned freeUnit = 0;
- do {
- freeUnit = freeUnits;
- freeUnits = freeUnit & (freeUnit - 1);
- } while (freeUnits);
+ // Use the itinerary for the underlying instruction to reserve FU's
+ // in the scoreboard at the appropriate future cycles.
+ unsigned idx = SU->getInstr()->getDesc().getSchedClass();
+ for (const InstrStage *IS = ItinData.beginStage(idx),
+ *E = ItinData.endStage(idx); IS != E; ++IS) {
+ // We must reserve one of the stage's units for every cycle the
+ // stage is occupied. FIXME it would be more accurate to reserve
+ // the same unit free in all the cycles.
+ for (unsigned int i = 0; i < IS->getCycles(); ++i) {
+ assert(((cycle + i) < ScoreboardDepth) &&
+ "Scoreboard depth exceeded!");
+
+ unsigned index = getFutureIndex(cycle + i);
+ unsigned freeUnits = IS->getUnits() & ~Scoreboard[index];
+
+ // reduce to a single unit
+ unsigned freeUnit = 0;
+ do {
+ freeUnit = freeUnits;
+ freeUnits = freeUnit & (freeUnit - 1);
+ } while (freeUnits);
+
+ assert(freeUnit && "No function unit available!");
+ Scoreboard[index] |= freeUnit;
+ }
- assert(freeUnit && "No function unit available!");
- Scoreboard[index] |= freeUnit;
+ // Advance the cycle to the next stage.
+ cycle += IS->getNextCycles();
}
- // Advance the cycle to the next stage.
- cycle += IS->getNextCycles();
+ DEBUG(dumpScoreboard());
}
-
- DEBUG(dumpScoreboard());
}
void ExactHazardRecognizer::AdvanceCycle() {
More information about the llvm-branch-commits
mailing list