aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2012-06-05 03:44:40 +0000
committerAndrew Trick <atrick@apple.com>2012-06-05 03:44:40 +0000
commitfc992996f751e0941951b6d08d8f1e80ebec1385 (patch)
tree9205e39624f5c786dee5160b882d65c7865e45b2 /lib
parent4eb4e5eb224b3d737558bcda8a0a369cc9d800e6 (diff)
downloadexternal_llvm-fc992996f751e0941951b6d08d8f1e80ebec1385.zip
external_llvm-fc992996f751e0941951b6d08d8f1e80ebec1385.tar.gz
external_llvm-fc992996f751e0941951b6d08d8f1e80ebec1385.tar.bz2
misched: Added MultiIssueItineraries.
This allows a subtarget to explicitly specify the issue width and other properties without providing pipeline stage details for every instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157979 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/ScoreboardHazardRecognizer.cpp8
-rw-r--r--lib/CodeGen/SelectionDAG/ResourcePriorityQueue.cpp2
-rw-r--r--lib/MC/MCSubtargetInfo.cpp6
-rw-r--r--lib/Target/ARM/ARMSubtarget.cpp7
-rw-r--r--lib/Target/Hexagon/HexagonSchedule.td5
-rw-r--r--lib/Target/Hexagon/HexagonScheduleV4.td6
-rw-r--r--lib/Target/Hexagon/HexagonSubtarget.cpp3
-rw-r--r--lib/Target/MBlaze/MBlazeSubtarget.cpp7
8 files changed, 22 insertions, 22 deletions
diff --git a/lib/CodeGen/ScoreboardHazardRecognizer.cpp b/lib/CodeGen/ScoreboardHazardRecognizer.cpp
index ac62d7e..7110b75 100644
--- a/lib/CodeGen/ScoreboardHazardRecognizer.cpp
+++ b/lib/CodeGen/ScoreboardHazardRecognizer.cpp
@@ -44,8 +44,6 @@ ScoreboardHazardRecognizer(const InstrItineraryData *II,
// avoid dealing with the boundary condition.
unsigned ScoreboardDepth = 1;
if (ItinData && !ItinData->isEmpty()) {
- IssueWidth = ItinData->IssueWidth;
-
for (unsigned idx = 0; ; ++idx) {
if (ItinData->isEndMarker(idx))
break;
@@ -74,11 +72,13 @@ ScoreboardHazardRecognizer(const InstrItineraryData *II,
ReservedScoreboard.reset(ScoreboardDepth);
RequiredScoreboard.reset(ScoreboardDepth);
- if (!MaxLookAhead)
+ if (!isEnabled())
DEBUG(dbgs() << "Disabled scoreboard hazard recognizer\n");
- else
+ else {
+ IssueWidth = ItinData->Props.IssueWidth;
DEBUG(dbgs() << "Using scoreboard hazard recognizer: Depth = "
<< ScoreboardDepth << '\n');
+ }
}
void ScoreboardHazardRecognizer::Reset() {
diff --git a/lib/CodeGen/SelectionDAG/ResourcePriorityQueue.cpp b/lib/CodeGen/SelectionDAG/ResourcePriorityQueue.cpp
index 2695163..01622cb 100644
--- a/lib/CodeGen/SelectionDAG/ResourcePriorityQueue.cpp
+++ b/lib/CodeGen/SelectionDAG/ResourcePriorityQueue.cpp
@@ -318,7 +318,7 @@ void ResourcePriorityQueue::reserveResources(SUnit *SU) {
// If packet is now full, reset the state so in the next cycle
// we start fresh.
- if (Packet.size() >= InstrItins->IssueWidth) {
+ if (Packet.size() >= InstrItins->Props.IssueWidth) {
ResourcesModel->clearResources();
Packet.clear();
}
diff --git a/lib/MC/MCSubtargetInfo.cpp b/lib/MC/MCSubtargetInfo.cpp
index 86dc108..cb56a54 100644
--- a/lib/MC/MCSubtargetInfo.cpp
+++ b/lib/MC/MCSubtargetInfo.cpp
@@ -91,6 +91,8 @@ MCSubtargetInfo::getInstrItineraryForCPU(StringRef CPU) const {
return InstrItineraryData();
}
- return InstrItineraryData(Stages, OperandCycles, ForwardingPathes,
- (InstrItinerary *)Found->Value);
+ InstrItinerarySubtargetValue *V =
+ (InstrItinerarySubtargetValue *)Found->Value;
+ return InstrItineraryData(V->Props, Stages, OperandCycles, ForwardingPathes,
+ V->Itineraries);
}
diff --git a/lib/Target/ARM/ARMSubtarget.cpp b/lib/Target/ARM/ARMSubtarget.cpp
index ac568b1..0bea9e4b 100644
--- a/lib/Target/ARM/ARMSubtarget.cpp
+++ b/lib/Target/ARM/ARMSubtarget.cpp
@@ -200,13 +200,14 @@ void ARMSubtarget::computeIssueWidth() {
const InstrStage *IS = InstrItins.Stages + itin->FirstStage;
allStage1Units |= IS->getUnits();
}
- InstrItins.IssueWidth = 0;
+ InstrItins.Props.IssueWidth = 0;
while (allStage1Units) {
- ++InstrItins.IssueWidth;
+ ++InstrItins.Props.IssueWidth;
// clear the lowest bit
allStage1Units ^= allStage1Units & ~(allStage1Units - 1);
}
- assert(InstrItins.IssueWidth <= 2 && "itinerary bug, too many stage 1 units");
+ assert(InstrItins.Props.IssueWidth <= 2 &&
+ "itinerary bug, too many stage 1 units");
}
bool ARMSubtarget::enablePostRAScheduler(
diff --git a/lib/Target/Hexagon/HexagonSchedule.td b/lib/Target/Hexagon/HexagonSchedule.td
index c488796..b4df678 100644
--- a/lib/Target/Hexagon/HexagonSchedule.td
+++ b/lib/Target/Hexagon/HexagonSchedule.td
@@ -41,7 +41,10 @@ def HexagonItineraries :
InstrItinData<SYS , [InstrStage<1, [LSUNIT]>]>,
InstrItinData<MARKER , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>,
InstrItinData<PSEUDO , [InstrStage<1, [LUNIT, LSUNIT, MUNIT, SUNIT]>]>
- ]>;
+ ]> {
+ // Max issue per cycle == bundle width.
+ let IssueWidth = 4;
+}
//===----------------------------------------------------------------------===//
// V4 Machine Info +
diff --git a/lib/Target/Hexagon/HexagonScheduleV4.td b/lib/Target/Hexagon/HexagonScheduleV4.td
index 1d82dbb..8d6f7b2 100644
--- a/lib/Target/Hexagon/HexagonScheduleV4.td
+++ b/lib/Target/Hexagon/HexagonScheduleV4.td
@@ -52,7 +52,11 @@ def HexagonItinerariesV4 :
InstrItinData<MARKER , [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
InstrItinData<PREFIX , [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>,
InstrItinData<PSEUDO , [InstrStage<1, [SLOT0, SLOT1, SLOT2, SLOT3]>]>
- ]>;
+ ]> {
+ // Max issue per cycle == bundle width.
+ let IssueWidth = 4;
+}
+
//===----------------------------------------------------------------------===//
// Hexagon V4 Resource Definitions -
diff --git a/lib/Target/Hexagon/HexagonSubtarget.cpp b/lib/Target/Hexagon/HexagonSubtarget.cpp
index 8744b7b..ce81a78 100644
--- a/lib/Target/Hexagon/HexagonSubtarget.cpp
+++ b/lib/Target/Hexagon/HexagonSubtarget.cpp
@@ -61,9 +61,6 @@ HexagonSubtarget::HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS):
// Initialize scheduling itinerary for the specified CPU.
InstrItins = getInstrItineraryForCPU(CPUString);
- // Max issue per cycle == bundle width.
- InstrItins.IssueWidth = 4;
-
if (EnableMemOps)
UseMemOps = true;
else
diff --git a/lib/Target/MBlaze/MBlazeSubtarget.cpp b/lib/Target/MBlaze/MBlazeSubtarget.cpp
index d12d142..dc2ad29 100644
--- a/lib/Target/MBlaze/MBlazeSubtarget.cpp
+++ b/lib/Target/MBlaze/MBlazeSubtarget.cpp
@@ -43,13 +43,6 @@ MBlazeSubtarget::MBlazeSubtarget(const std::string &TT,
// Initialize scheduling itinerary for the specified CPU.
InstrItins = getInstrItineraryForCPU(CPUName);
-
- // Compute the issue width of the MBlaze itineraries
- computeIssueWidth();
-}
-
-void MBlazeSubtarget::computeIssueWidth() {
- InstrItins.IssueWidth = 1;
}
bool MBlazeSubtarget::