1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00

[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

llvm-svn: 318803
This commit is contained in:
Evandro Menezes 2017-11-21 21:33:52 +00:00
parent 10ae105d9b
commit 0e8f8debcf
3 changed files with 19 additions and 14 deletions

View File

@ -1672,7 +1672,8 @@ void CodeGenSchedModels::collectRWResources(ArrayRef<unsigned> Writes,
// Find the processor's resource units for this kind of resource. // Find the processor's resource units for this kind of resource.
Record *CodeGenSchedModels::findProcResUnits(Record *ProcResKind, Record *CodeGenSchedModels::findProcResUnits(Record *ProcResKind,
const CodeGenProcModel &PM) const { const CodeGenProcModel &PM,
ArrayRef<SMLoc> Loc) const {
if (ProcResKind->isSubClassOf("ProcResourceUnits")) if (ProcResKind->isSubClassOf("ProcResourceUnits"))
return ProcResKind; return ProcResKind;
@ -1684,7 +1685,7 @@ Record *CodeGenSchedModels::findProcResUnits(Record *ProcResKind,
if (ProcResDef->getValueAsDef("Kind") == ProcResKind if (ProcResDef->getValueAsDef("Kind") == ProcResKind
&& ProcResDef->getValueAsDef("SchedModel") == PM.ModelDef) { && ProcResDef->getValueAsDef("SchedModel") == PM.ModelDef) {
if (ProcUnitDef) { if (ProcUnitDef) {
PrintFatalError(ProcResDef->getLoc(), PrintFatalError(Loc,
"Multiple ProcessorResourceUnits associated with " "Multiple ProcessorResourceUnits associated with "
+ ProcResKind->getName()); + ProcResKind->getName());
} }
@ -1695,7 +1696,7 @@ Record *CodeGenSchedModels::findProcResUnits(Record *ProcResKind,
if (ProcResGroup == ProcResKind if (ProcResGroup == ProcResKind
&& ProcResGroup->getValueAsDef("SchedModel") == PM.ModelDef) { && ProcResGroup->getValueAsDef("SchedModel") == PM.ModelDef) {
if (ProcUnitDef) { if (ProcUnitDef) {
PrintFatalError((ProcResGroup)->getLoc(), PrintFatalError(Loc,
"Multiple ProcessorResourceUnits associated with " "Multiple ProcessorResourceUnits associated with "
+ ProcResKind->getName()); + ProcResKind->getName());
} }
@ -1703,7 +1704,7 @@ Record *CodeGenSchedModels::findProcResUnits(Record *ProcResKind,
} }
} }
if (!ProcUnitDef) { if (!ProcUnitDef) {
PrintFatalError(ProcResKind->getLoc(), PrintFatalError(Loc,
"No ProcessorResources associated with " "No ProcessorResources associated with "
+ ProcResKind->getName()); + ProcResKind->getName());
} }
@ -1712,9 +1713,10 @@ Record *CodeGenSchedModels::findProcResUnits(Record *ProcResKind,
// Iteratively add a resource and its super resources. // Iteratively add a resource and its super resources.
void CodeGenSchedModels::addProcResource(Record *ProcResKind, void CodeGenSchedModels::addProcResource(Record *ProcResKind,
CodeGenProcModel &PM) { CodeGenProcModel &PM,
ArrayRef<SMLoc> Loc) {
while (true) { while (true) {
Record *ProcResUnits = findProcResUnits(ProcResKind, PM); Record *ProcResUnits = findProcResUnits(ProcResKind, PM, Loc);
// See if this ProcResource is already associated with this processor. // See if this ProcResource is already associated with this processor.
if (is_contained(PM.ProcResourceDefs, ProcResUnits)) if (is_contained(PM.ProcResourceDefs, ProcResUnits))
@ -1744,7 +1746,7 @@ void CodeGenSchedModels::addWriteRes(Record *ProcWriteResDef, unsigned PIdx) {
RecVec ProcResDefs = ProcWriteResDef->getValueAsListOfDefs("ProcResources"); RecVec ProcResDefs = ProcWriteResDef->getValueAsListOfDefs("ProcResources");
for (RecIter WritePRI = ProcResDefs.begin(), WritePRE = ProcResDefs.end(); for (RecIter WritePRI = ProcResDefs.begin(), WritePRE = ProcResDefs.end();
WritePRI != WritePRE; ++WritePRI) { WritePRI != WritePRE; ++WritePRI) {
addProcResource(*WritePRI, ProcModels[PIdx]); addProcResource(*WritePRI, ProcModels[PIdx], ProcWriteResDef->getLoc());
} }
} }

View File

@ -382,8 +382,8 @@ public:
unsigned findSchedClassIdx(Record *ItinClassDef, ArrayRef<unsigned> Writes, unsigned findSchedClassIdx(Record *ItinClassDef, ArrayRef<unsigned> Writes,
ArrayRef<unsigned> Reads) const; ArrayRef<unsigned> Reads) const;
Record *findProcResUnits(Record *ProcResKind, Record *findProcResUnits(Record *ProcResKind, const CodeGenProcModel &PM,
const CodeGenProcModel &PM) const; ArrayRef<SMLoc> Loc) const;
private: private:
void collectProcModels(); void collectProcModels();
@ -432,7 +432,8 @@ private:
void collectRWResources(ArrayRef<unsigned> Writes, ArrayRef<unsigned> Reads, void collectRWResources(ArrayRef<unsigned> Writes, ArrayRef<unsigned> Reads,
ArrayRef<unsigned> ProcIndices); ArrayRef<unsigned> ProcIndices);
void addProcResource(Record *ProcResourceKind, CodeGenProcModel &PM); void addProcResource(Record *ProcResourceKind, CodeGenProcModel &PM,
ArrayRef<SMLoc> Loc);
void addWriteRes(Record *ProcWriteResDef, unsigned PIdx); void addWriteRes(Record *ProcWriteResDef, unsigned PIdx);

View File

@ -601,8 +601,9 @@ void SubtargetEmitter::EmitProcessorResources(const CodeGenProcModel &ProcModel,
else { else {
// Find the SuperIdx // Find the SuperIdx
if (PRDef->getValueInit("Super")->isComplete()) { if (PRDef->getValueInit("Super")->isComplete()) {
SuperDef = SchedModels.findProcResUnits( SuperDef =
PRDef->getValueAsDef("Super"), ProcModel); SchedModels.findProcResUnits(PRDef->getValueAsDef("Super"),
ProcModel, PRDef->getLoc());
SuperIdx = ProcModel.getProcResourceIdx(SuperDef); SuperIdx = ProcModel.getProcResourceIdx(SuperDef);
} }
NumUnits = PRDef->getValueAsInt("NumUnits"); NumUnits = PRDef->getValueAsInt("NumUnits");
@ -739,7 +740,7 @@ void SubtargetEmitter::ExpandProcResources(RecVec &PRVec,
SubResources = PRDef->getValueAsListOfDefs("Resources"); SubResources = PRDef->getValueAsListOfDefs("Resources");
else { else {
SubResources.push_back(PRDef); SubResources.push_back(PRDef);
PRDef = SchedModels.findProcResUnits(PRVec[i], PM); PRDef = SchedModels.findProcResUnits(PRDef, PM, PRDef->getLoc());
for (Record *SubDef = PRDef; for (Record *SubDef = PRDef;
SubDef->getValueInit("Super")->isComplete();) { SubDef->getValueInit("Super")->isComplete();) {
if (SubDef->isSubClassOf("ProcResGroup")) { if (SubDef->isSubClassOf("ProcResGroup")) {
@ -748,7 +749,8 @@ void SubtargetEmitter::ExpandProcResources(RecVec &PRVec,
" cannot be a super resources."); " cannot be a super resources.");
} }
Record *SuperDef = Record *SuperDef =
SchedModels.findProcResUnits(SubDef->getValueAsDef("Super"), PM); SchedModels.findProcResUnits(SubDef->getValueAsDef("Super"), PM,
SubDef->getLoc());
PRVec.push_back(SuperDef); PRVec.push_back(SuperDef);
Cycles.push_back(Cycles[i]); Cycles.push_back(Cycles[i]);
SubDef = SuperDef; SubDef = SuperDef;