diff options
author | Chris Lattner <sabre@nondot.org> | 2010-02-23 06:16:51 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-02-23 06:16:51 +0000 |
commit | 25b6f91c549225ae4fc9855b9c82a46d05dfd4d8 (patch) | |
tree | b860ccaef991bbd6a5ec8d31ae7cc06c1f4ee0f8 /utils | |
parent | be5ad7dce2e20275a1c4f2d7240d1bf495b9f418 (diff) | |
download | external_llvm-25b6f91c549225ae4fc9855b9c82a46d05dfd4d8.zip external_llvm-25b6f91c549225ae4fc9855b9c82a46d05dfd4d8.tar.gz external_llvm-25b6f91c549225ae4fc9855b9c82a46d05dfd4d8.tar.bz2 |
merge some code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96896 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r-- | utils/TableGen/CodeGenDAGPatterns.cpp | 36 | ||||
-rw-r--r-- | utils/TableGen/CodeGenDAGPatterns.h | 1 |
2 files changed, 21 insertions, 16 deletions
diff --git a/utils/TableGen/CodeGenDAGPatterns.cpp b/utils/TableGen/CodeGenDAGPatterns.cpp index 235ed5f..c789f3a 100644 --- a/utils/TableGen/CodeGenDAGPatterns.cpp +++ b/utils/TableGen/CodeGenDAGPatterns.cpp @@ -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"))); } } diff --git a/utils/TableGen/CodeGenDAGPatterns.h b/utils/TableGen/CodeGenDAGPatterns.h index 9c46a12..c246483 100644 --- a/utils/TableGen/CodeGenDAGPatterns.h +++ b/utils/TableGen/CodeGenDAGPatterns.h @@ -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, |