summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-02-23 06:16:51 +0000
committerChris Lattner <sabre@nondot.org>2010-02-23 06:16:51 +0000
commit25b6f91c549225ae4fc9855b9c82a46d05dfd4d8 (patch)
treeb860ccaef991bbd6a5ec8d31ae7cc06c1f4ee0f8 /utils
parentbe5ad7dce2e20275a1c4f2d7240d1bf495b9f418 (diff)
downloadllvm-25b6f91c549225ae4fc9855b9c82a46d05dfd4d8.tar.gz
llvm-25b6f91c549225ae4fc9855b9c82a46d05dfd4d8.tar.bz2
llvm-25b6f91c549225ae4fc9855b9c82a46d05dfd4d8.tar.xz
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.cpp36
-rw-r--r--utils/TableGen/CodeGenDAGPatterns.h1
2 files changed, 21 insertions, 16 deletions
diff --git a/utils/TableGen/CodeGenDAGPatterns.cpp b/utils/TableGen/CodeGenDAGPatterns.cpp
index 235ed5fc41..c789f3a2e5 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 9c46a12254..c246483acf 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,