diff options
author | Evandro Menezes <e.menezes@samsung.com> | 2017-11-21 21:33:52 +0000 |
---|---|---|
committer | Evandro Menezes <e.menezes@samsung.com> | 2017-11-21 21:33:52 +0000 |
commit | 8304ff28f11a76ac7f92bda8db9061835139bebc (patch) | |
tree | f3a1e7247eb5f446f083df44ea148009d50b9917 /utils | |
parent | c3a6d30355b8642313f1088c69aa48d67f13b9dc (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.cpp | 16 | ||||
-rw-r--r-- | utils/TableGen/CodeGenSchedule.h | 7 | ||||
-rw-r--r-- | utils/TableGen/SubtargetEmitter.cpp | 10 |
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; |