mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
When matching patterns that have a complex pattern as their root, make
sure to only run the complex pattern on nodes where the target opts in. This patch only handles targets with one opcode specified so far, but fixes 16 failures, only 34 left. llvm-svn: 96813
This commit is contained in:
parent
b9f6931c4a
commit
b77c4c6a30
@ -239,9 +239,24 @@ void MatcherGen::EmitLeafMatchCode(const TreePatternNode *N) {
|
||||
errs() << "We expect complex pattern uses to have names: " << *N << "\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
// Handle complex pattern.
|
||||
const ComplexPattern &CP = CGP.getComplexPattern(LeafRec);
|
||||
|
||||
// If we're at the root of the pattern, we have to check that the opcode
|
||||
// is a one of the ones requested to be matched.
|
||||
if (N == Pattern.getSrcPattern()) {
|
||||
const std::vector<Record*> &OpNodes = CP.getRootNodes();
|
||||
if (OpNodes.size() == 1) {
|
||||
StringRef OpName = CGP.getSDNodeInfo(OpNodes[0]).getEnumName();
|
||||
AddMatcherNode(new CheckOpcodeMatcherNode(OpName));
|
||||
} else if (!OpNodes.empty()) {
|
||||
for (unsigned j = 0, e = OpNodes.size(); j != e; j++) {
|
||||
// .getOpcodeName(OpNodes[j], CGP)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AddMatcherNode(new CheckComplexPatMatcherNode(CP));
|
||||
|
||||
// If the complex pattern has a chain, then we need to keep track of the
|
||||
|
Loading…
Reference in New Issue
Block a user