mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-03 17:32:59 +00:00
[SchedModel] Remove instregex entries that don't match any instructions
This patch throws a fatal error if an instregex entry doesn't actually match any instructions. This is part of the work to reduce the compile time impact of increased instregex usage (PR35955), although the x86 models seem to be relatively clean. All the cases I encountered have now been fixed in trunk and this will ensure they don't get reintroduced. Differential Revision: https://reviews.llvm.org/D44687 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328459 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9c2d3ad18e
commit
fb87505f61
@ -106,6 +106,8 @@ struct InstRegexOp : public SetTheory::Operator {
|
||||
Regexpr = Regex(pat);
|
||||
}
|
||||
|
||||
int NumMatches = 0;
|
||||
|
||||
unsigned NumGeneric = Target.getNumFixedInstructions();
|
||||
ArrayRef<const CodeGenInstruction *> Generics =
|
||||
Target.getInstructionsByEnumValue().slice(0, NumGeneric + 1);
|
||||
@ -114,8 +116,10 @@ struct InstRegexOp : public SetTheory::Operator {
|
||||
for (auto *Inst : Generics) {
|
||||
StringRef InstName = Inst->TheDef->getName();
|
||||
if (InstName.startswith(Prefix) &&
|
||||
(!Regexpr || Regexpr->match(InstName.substr(Prefix.size()))))
|
||||
(!Regexpr || Regexpr->match(InstName.substr(Prefix.size())))) {
|
||||
Elts.insert(Inst->TheDef);
|
||||
NumMatches++;
|
||||
}
|
||||
}
|
||||
|
||||
ArrayRef<const CodeGenInstruction *> Instructions =
|
||||
@ -139,9 +143,14 @@ struct InstRegexOp : public SetTheory::Operator {
|
||||
// a regex that needs to be checked.
|
||||
for (auto *Inst : make_range(Range)) {
|
||||
StringRef InstName = Inst->TheDef->getName();
|
||||
if (!Regexpr || Regexpr->match(InstName.substr(Prefix.size())))
|
||||
if (!Regexpr || Regexpr->match(InstName.substr(Prefix.size()))) {
|
||||
Elts.insert(Inst->TheDef);
|
||||
NumMatches++;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 == NumMatches)
|
||||
PrintFatalError(Loc, "instregex has no matches: " + Original);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user