summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorEvandro Menezes <e.menezes@samsung.com>2017-11-21 21:33:52 +0000
committerEvandro Menezes <e.menezes@samsung.com>2017-11-21 21:33:52 +0000
commit8304ff28f11a76ac7f92bda8db9061835139bebc (patch)
treef3a1e7247eb5f446f083df44ea148009d50b9917 /utils
parentc3a6d30355b8642313f1088c69aa48d67f13b9dc (diff)
[TableGen] Improve error reporting
When searching for a resource unit, use the reference location instead of the definition location in case of an error. Differential revision: https://reviews.llvm.org/D40263 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@318803 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r--utils/TableGen/CodeGenSchedule.cpp16
-rw-r--r--utils/TableGen/CodeGenSchedule.h7
-rw-r--r--utils/TableGen/SubtargetEmitter.cpp10
3 files changed, 19 insertions, 14 deletions
diff --git a/utils/TableGen/CodeGenSchedule.cpp b/utils/TableGen/CodeGenSchedule.cpp
index 3a30b28d669..b753e19a544 100644
--- a/utils/TableGen/CodeGenSchedule.cpp
+++ b/utils/TableGen/CodeGenSchedule.cpp
@@ -1672,7 +1672,8 @@ void CodeGenSchedModels::collectRWResources(ArrayRef<unsigned> Writes,
// Find the processor's resource units for this kind of resource.
Record *CodeGenSchedModels::findProcResUnits(Record *ProcResKind,
- const CodeGenProcModel &PM) const {
+ const CodeGenProcModel &PM,
+ ArrayRef<SMLoc> Loc) const {
if (ProcResKind->isSubClassOf("ProcResourceUnits"))
return ProcResKind;
@@ -1684,7 +1685,7 @@ Record *CodeGenSchedModels::findProcResUnits(Record *ProcResKind,
if (ProcResDef->getValueAsDef("Kind") == ProcResKind
&& ProcResDef->getValueAsDef("SchedModel") == PM.ModelDef) {
if (ProcUnitDef) {
- PrintFatalError(ProcResDef->getLoc(),
+ PrintFatalError(Loc,
"Multiple ProcessorResourceUnits associated with "
+ ProcResKind->getName());
}
@@ -1695,7 +1696,7 @@ Record *CodeGenSchedModels::findProcResUnits(Record *ProcResKind,
if (ProcResGroup == ProcResKind
&& ProcResGroup->getValueAsDef("SchedModel") == PM.ModelDef) {
if (ProcUnitDef) {
- PrintFatalError((ProcResGroup)->getLoc(),
+ PrintFatalError(Loc,
"Multiple ProcessorResourceUnits associated with "
+ ProcResKind->getName());
}
@@ -1703,7 +1704,7 @@ Record *CodeGenSchedModels::findProcResUnits(Record *ProcResKind,
}
}
if (!ProcUnitDef) {
- PrintFatalError(ProcResKind->getLoc(),
+ PrintFatalError(Loc,
"No ProcessorResources associated with "
+ ProcResKind->getName());
}
@@ -1712,9 +1713,10 @@ Record *CodeGenSchedModels::findProcResUnits(Record *ProcResKind,
// Iteratively add a resource and its super resources.
void CodeGenSchedModels::addProcResource(Record *ProcResKind,
- CodeGenProcModel &PM) {
+ CodeGenProcModel &PM,
+ ArrayRef<SMLoc> Loc) {
while (true) {
- Record *ProcResUnits = findProcResUnits(ProcResKind, PM);
+ Record *ProcResUnits = findProcResUnits(ProcResKind, PM, Loc);
// See if this ProcResource is already associated with this processor.
if (is_contained(PM.ProcResourceDefs, ProcResUnits))
@@ -1744,7 +1746,7 @@ void CodeGenSchedModels::addWriteRes(Record *ProcWriteResDef, unsigned PIdx) {
RecVec ProcResDefs = ProcWriteResDef->getValueAsListOfDefs("ProcResources");
for (RecIter WritePRI = ProcResDefs.begin(), WritePRE = ProcResDefs.end();
WritePRI != WritePRE; ++WritePRI) {
- addProcResource(*WritePRI, ProcModels[PIdx]);
+ addProcResource(*WritePRI, ProcModels[PIdx], ProcWriteResDef->getLoc());
}
}
diff --git a/utils/TableGen/CodeGenSchedule.h b/utils/TableGen/CodeGenSchedule.h
index 3a30ba9ba2a..46e22cd1281 100644
--- a/utils/TableGen/CodeGenSchedule.h
+++ b/utils/TableGen/CodeGenSchedule.h
@@ -382,8 +382,8 @@ public:
unsigned findSchedClassIdx(Record *ItinClassDef, ArrayRef<unsigned> Writes,
ArrayRef<unsigned> Reads) const;
- Record *findProcResUnits(Record *ProcResKind,
- const CodeGenProcModel &PM) const;
+ Record *findProcResUnits(Record *ProcResKind, const CodeGenProcModel &PM,
+ ArrayRef<SMLoc> Loc) const;
private:
void collectProcModels();
@@ -432,7 +432,8 @@ private:
void collectRWResources(ArrayRef<unsigned> Writes, ArrayRef<unsigned> Reads,
ArrayRef<unsigned> ProcIndices);
- void addProcResource(Record *ProcResourceKind, CodeGenProcModel &PM);
+ void addProcResource(Record *ProcResourceKind, CodeGenProcModel &PM,
+ ArrayRef<SMLoc> Loc);
void addWriteRes(Record *ProcWriteResDef, unsigned PIdx);
diff --git a/utils/TableGen/SubtargetEmitter.cpp b/utils/TableGen/SubtargetEmitter.cpp
index e5e64ab9eb6..2c5658f8ce7 100644
--- a/utils/TableGen/SubtargetEmitter.cpp
+++ b/utils/TableGen/SubtargetEmitter.cpp
@@ -601,8 +601,9 @@ void SubtargetEmitter::EmitProcessorResources(const CodeGenProcModel &ProcModel,
else {
// Find the SuperIdx
if (PRDef->getValueInit("Super")->isComplete()) {
- SuperDef = SchedModels.findProcResUnits(
- PRDef->getValueAsDef("Super"), ProcModel);
+ SuperDef =
+ SchedModels.findProcResUnits(PRDef->getValueAsDef("Super"),
+ ProcModel, PRDef->getLoc());
SuperIdx = ProcModel.getProcResourceIdx(SuperDef);
}
NumUnits = PRDef->getValueAsInt("NumUnits");
@@ -739,7 +740,7 @@ void SubtargetEmitter::ExpandProcResources(RecVec &PRVec,
SubResources = PRDef->getValueAsListOfDefs("Resources");
else {
SubResources.push_back(PRDef);
- PRDef = SchedModels.findProcResUnits(PRVec[i], PM);
+ PRDef = SchedModels.findProcResUnits(PRDef, PM, PRDef->getLoc());
for (Record *SubDef = PRDef;
SubDef->getValueInit("Super")->isComplete();) {
if (SubDef->isSubClassOf("ProcResGroup")) {
@@ -748,7 +749,8 @@ void SubtargetEmitter::ExpandProcResources(RecVec &PRVec,
" cannot be a super resources.");
}
Record *SuperDef =
- SchedModels.findProcResUnits(SubDef->getValueAsDef("Super"), PM);
+ SchedModels.findProcResUnits(SubDef->getValueAsDef("Super"), PM,
+ SubDef->getLoc());
PRVec.push_back(SuperDef);
Cycles.push_back(Cycles[i]);
SubDef = SuperDef;