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:
parent
10ae105d9b
commit
0e8f8debcf
@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user