mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-02 16:56:39 +00:00
Add source Record* reference to PatternToMatch. Allows better diagnostics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121196 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
52e635ea35
commit
997759ac22
@ -2482,7 +2482,8 @@ void CodeGenDAGPatterns::ParseInstructions() {
|
||||
|
||||
Record *Instr = II->first;
|
||||
AddPatternToMatch(I,
|
||||
PatternToMatch(Instr->getValueAsListInit("Predicates"),
|
||||
PatternToMatch(Instr,
|
||||
Instr->getValueAsListInit("Predicates"),
|
||||
SrcPattern,
|
||||
TheInst.getResultPattern(),
|
||||
TheInst.getImpResults(),
|
||||
@ -2714,7 +2715,8 @@ void CodeGenDAGPatterns::ParsePatterns() {
|
||||
|
||||
|
||||
AddPatternToMatch(Pattern,
|
||||
PatternToMatch(CurPattern->getValueAsListInit("Predicates"),
|
||||
PatternToMatch(CurPattern,
|
||||
CurPattern->getValueAsListInit("Predicates"),
|
||||
Pattern->getTree(0),
|
||||
Temp.getOnlyTree(), InstImpResults,
|
||||
CurPattern->getValueAsInt("AddedComplexity"),
|
||||
@ -3013,7 +3015,8 @@ void CodeGenDAGPatterns::GenerateVariants() {
|
||||
|
||||
// Otherwise, add it to the list of patterns we have.
|
||||
PatternsToMatch.
|
||||
push_back(PatternToMatch(PatternsToMatch[i].getPredicates(),
|
||||
push_back(PatternToMatch(PatternsToMatch[i].getSrcRecord(),
|
||||
PatternsToMatch[i].getPredicates(),
|
||||
Variant, PatternsToMatch[i].getDstPattern(),
|
||||
PatternsToMatch[i].getDstRegs(),
|
||||
PatternsToMatch[i].getAddedComplexity(),
|
||||
|
@ -568,13 +568,14 @@ public:
|
||||
/// processed to produce isel.
|
||||
class PatternToMatch {
|
||||
public:
|
||||
PatternToMatch(ListInit *preds,
|
||||
PatternToMatch(Record *srcrecord, ListInit *preds,
|
||||
TreePatternNode *src, TreePatternNode *dst,
|
||||
const std::vector<Record*> &dstregs,
|
||||
unsigned complexity, unsigned uid)
|
||||
: Predicates(preds), SrcPattern(src), DstPattern(dst),
|
||||
: SrcRecord(srcrecord), Predicates(preds), SrcPattern(src), DstPattern(dst),
|
||||
Dstregs(dstregs), AddedComplexity(complexity), ID(uid) {}
|
||||
|
||||
Record *SrcRecord; // Originating Record for the pattern.
|
||||
ListInit *Predicates; // Top level predicate conditions to match.
|
||||
TreePatternNode *SrcPattern; // Source pattern to match.
|
||||
TreePatternNode *DstPattern; // Resulting pattern.
|
||||
@ -582,6 +583,7 @@ public:
|
||||
unsigned AddedComplexity; // Add to matching pattern complexity.
|
||||
unsigned ID; // Unique ID for the record.
|
||||
|
||||
Record *getSrcRecord() const { return SrcRecord; }
|
||||
ListInit *getPredicates() const { return Predicates; }
|
||||
TreePatternNode *getSrcPattern() const { return SrcPattern; }
|
||||
TreePatternNode *getDstPattern() const { return DstPattern; }
|
||||
|
@ -381,14 +381,10 @@ void FastISelMap::CollectPatterns(CodeGenDAGPatterns &CGP) {
|
||||
SubRegNo,
|
||||
PhysRegInputs
|
||||
};
|
||||
// FIXME: Source location information for the diagnostic.
|
||||
if (SimplePatterns[Operands][OpcodeName][VT][RetVT]
|
||||
.count(PredicateCheck)) {
|
||||
SmallString<128> PatText;
|
||||
raw_svector_ostream OS(PatText);
|
||||
Pattern.SrcPattern->print(OS);
|
||||
throw "Duplicate record: " + OS.str().str();
|
||||
}
|
||||
.count(PredicateCheck))
|
||||
throw TGError(Pattern.getSrcRecord()->getLoc(), "Duplicate record!");
|
||||
|
||||
SimplePatterns[Operands][OpcodeName][VT][RetVT][PredicateCheck] = Memo;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user