mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
resolve a fixme by having the .td file parser reject thigns like
(set GPR, somecomplexpattern) if somecomplexpattern doesn't declare what it can match. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97513 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
19d417c346
commit
405f1252b9
@ -1407,7 +1407,6 @@ void TreePattern::dump() const { print(errs()); }
|
||||
// CodeGenDAGPatterns implementation
|
||||
//
|
||||
|
||||
// FIXME: REMOVE OSTREAM ARGUMENT
|
||||
CodeGenDAGPatterns::CodeGenDAGPatterns(RecordKeeper &R) : Records(R) {
|
||||
Intrinsics = LoadIntrinsics(Records, false);
|
||||
TgtIntrinsics = LoadIntrinsics(Records, true);
|
||||
@ -2144,6 +2143,15 @@ void CodeGenDAGPatterns::AddPatternToMatch(const TreePattern *Pattern,
|
||||
if (!PTM.getSrcPattern()->canPatternMatch(Reason, *this))
|
||||
Pattern->error("Pattern can never match: " + Reason);
|
||||
|
||||
// If the source pattern's root is a complex pattern, that complex pattern
|
||||
// must specify the nodes it can potentially match.
|
||||
if (const ComplexPattern *CP =
|
||||
PTM.getSrcPattern()->getComplexPatternInfo(*this))
|
||||
if (CP->getRootNodes().empty())
|
||||
Pattern->error("ComplexPattern at root must specify list of opcodes it"
|
||||
" could match");
|
||||
|
||||
|
||||
// Find all of the named values in the input and output, ensure they have the
|
||||
// same type.
|
||||
std::map<std::string, NameRecord> SrcNames, DstNames;
|
||||
|
@ -233,7 +233,6 @@ void DAGISelEmitter::run(raw_ostream &OS) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Matcher *TheMatcher = new ScopeMatcher(&PatternMatchers[0],
|
||||
PatternMatchers.size());
|
||||
|
||||
|
@ -505,16 +505,11 @@ bool MatcherGen::EmitMatcherCode(unsigned Variant) {
|
||||
// check.
|
||||
if (const ComplexPattern *CP =
|
||||
Pattern.getSrcPattern()->getComplexPatternInfo(CGP)) {
|
||||
|
||||
const std::vector<Record*> &OpNodes = CP->getRootNodes();
|
||||
if (OpNodes.empty()) {
|
||||
// FIXME: Empty OpNodes runs on everything, is this even valid?
|
||||
if (Variant != 0) return true;
|
||||
} else {
|
||||
if (Variant >= OpNodes.size()) return true;
|
||||
|
||||
AddMatcher(new CheckOpcodeMatcher(CGP.getSDNodeInfo(OpNodes[Variant])));
|
||||
}
|
||||
assert(!OpNodes.empty() &&"Complex Pattern must specify what it can match");
|
||||
if (Variant >= OpNodes.size()) return true;
|
||||
|
||||
AddMatcher(new CheckOpcodeMatcher(CGP.getSDNodeInfo(OpNodes[Variant])));
|
||||
} else {
|
||||
if (Variant != 0) return true;
|
||||
}
|
||||
|
@ -140,7 +140,7 @@ static void ContractNodes(OwningPtr<Matcher> &MatcherPtr,
|
||||
return;
|
||||
}
|
||||
|
||||
// FIXME2: Kill off all the SelectionDAG::MorphNodeTo and getMachineNode
|
||||
// FIXME2: Kill off all the SelectionDAG::SelectNodeTo and getMachineNode
|
||||
// variants.
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user