merge some code.

llvm-svn: 96896
This commit is contained in:
Chris Lattner 2010-02-23 06:16:51 +00:00
parent 8e495e78a5
commit 0c0baa91a4
2 changed files with 21 additions and 16 deletions

View File

@ -2077,19 +2077,26 @@ void CodeGenDAGPatterns::ParseInstructions() {
SrcPattern = Pattern;
}
std::string Reason;
if (!SrcPattern->canPatternMatch(Reason, *this))
I->error("Instruction can never match: " + Reason);
Record *Instr = II->first;
TreePatternNode *DstPattern = TheInst.getResultPattern();
PatternsToMatch.
push_back(PatternToMatch(Instr->getValueAsListInit("Predicates"),
SrcPattern, DstPattern, TheInst.getImpResults(),
Instr->getValueAsInt("AddedComplexity")));
AddPatternToMatch(I,
PatternToMatch(Instr->getValueAsListInit("Predicates"),
SrcPattern, DstPattern,
TheInst.getImpResults(),
Instr->getValueAsInt("AddedComplexity")));
}
}
void CodeGenDAGPatterns::AddPatternToMatch(const TreePattern *Pattern,
const PatternToMatch &PTM) {
std::string Reason;
if (!PTM.getSrcPattern()->canPatternMatch(Reason, *this))
Pattern->error("Instruction can never match: " + Reason);
PatternsToMatch.push_back(PTM);
}
void CodeGenDAGPatterns::InferInstructionFlags() {
std::map<std::string, CodeGenInstruction> &InstrDescs =
@ -2218,15 +2225,12 @@ void CodeGenDAGPatterns::ParsePatterns() {
TreePattern Temp(Result->getRecord(), DstPattern, false, *this);
Temp.InferAllTypes();
std::string Reason;
if (!Pattern->getTree(0)->canPatternMatch(Reason, *this))
Pattern->error("Pattern can never match: " + Reason);
PatternsToMatch.
push_back(PatternToMatch(Patterns[i]->getValueAsListInit("Predicates"),
Pattern->getTree(0),
Temp.getOnlyTree(), InstImpResults,
Patterns[i]->getValueAsInt("AddedComplexity")));
AddPatternToMatch(Pattern,
PatternToMatch(Patterns[i]->getValueAsListInit("Predicates"),
Pattern->getTree(0),
Temp.getOnlyTree(), InstImpResults,
Patterns[i]->getValueAsInt("AddedComplexity")));
}
}

View File

@ -625,6 +625,7 @@ private:
void InferInstructionFlags();
void GenerateVariants();
void AddPatternToMatch(const TreePattern *Pattern, const PatternToMatch &PTM);
void FindPatternInputsAndOutputs(TreePattern *I, TreePatternNode *Pat,
std::map<std::string,
TreePatternNode*> &InstInputs,