mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-30 19:35:54 +00:00
Reject patterns that use a name multiple times in the src or result
of a pattern and where the uses have different types. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96904 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c6c161265e
commit
a27234e290
@ -2091,20 +2091,21 @@ void CodeGenDAGPatterns::ParseInstructions() {
|
||||
typedef std::pair<const TreePatternNode*, unsigned> NameRecord;
|
||||
|
||||
static void FindNames(const TreePatternNode *P,
|
||||
std::map<std::string, NameRecord> &Names) {
|
||||
std::map<std::string, NameRecord> &Names,
|
||||
const TreePattern *PatternTop) {
|
||||
if (!P->getName().empty()) {
|
||||
NameRecord &Rec = Names[P->getName()];
|
||||
// If this is the first instance of the name, remember the node.
|
||||
if (Rec.second++ == 0)
|
||||
Rec.first = P;
|
||||
// else
|
||||
// assert(Rec.first->getExtTypes() == P->getExtTypes() &&
|
||||
// "Type mismatch on name repetition");
|
||||
else if (Rec.first->getExtTypes() != P->getExtTypes())
|
||||
PatternTop->error("repetition of value: $" + P->getName() +
|
||||
" where different uses have different types!");
|
||||
}
|
||||
|
||||
if (!P->isLeaf()) {
|
||||
for (unsigned i = 0, e = P->getNumChildren(); i != e; ++i)
|
||||
FindNames(P->getChild(i), Names);
|
||||
FindNames(P->getChild(i), Names, PatternTop);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2118,8 +2119,8 @@ void CodeGenDAGPatterns::AddPatternToMatch(const TreePattern *Pattern,
|
||||
// Find all of the named values in the input and output, ensure they have the
|
||||
// same type.
|
||||
std::map<std::string, NameRecord> SrcNames, DstNames;
|
||||
FindNames(PTM.getSrcPattern(), SrcNames);
|
||||
FindNames(PTM.getDstPattern(), DstNames);
|
||||
FindNames(PTM.getSrcPattern(), SrcNames, Pattern);
|
||||
FindNames(PTM.getDstPattern(), DstNames, Pattern);
|
||||
|
||||
// Scan all of the named values in the destination pattern, rejecting them if
|
||||
// they don't exist in the input pattern.
|
||||
|
Loading…
x
Reference in New Issue
Block a user