summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/DAGISelEmitter.h
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-11-04 05:12:02 +0000
committerChris Lattner <sabre@nondot.org>2006-11-04 05:12:02 +0000
commited07f23c52fa0506cd5ab34604eb6742ddc06de8 (patch)
tree983c7faadbb38fc8bc9775245dd17627f0ef55b6 /llvm/utils/TableGen/DAGISelEmitter.h
parent1faa9097c7f283762b9ff263607fa096e36ce029 (diff)
downloadbcm5719-llvm-ed07f23c52fa0506cd5ab34604eb6742ddc06de8.tar.gz
bcm5719-llvm-ed07f23c52fa0506cd5ab34604eb6742ddc06de8.zip
Parse PredicateOperand's. When an instruction takes one, have the generated
isel fill in the instruction operands with the 'execute always' value automatically. llvm-svn: 31448
Diffstat (limited to 'llvm/utils/TableGen/DAGISelEmitter.h')
-rw-r--r--llvm/utils/TableGen/DAGISelEmitter.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/DAGISelEmitter.h b/llvm/utils/TableGen/DAGISelEmitter.h
index e50303672c2..a832b7dfe01 100644
--- a/llvm/utils/TableGen/DAGISelEmitter.h
+++ b/llvm/utils/TableGen/DAGISelEmitter.h
@@ -343,6 +343,11 @@ namespace llvm {
TreePatternNode *ParseTreePattern(DagInit *DI);
};
+ /// DAGPredicateOperand - One of these is created for each PredicateOperand
+ /// that has a set ExecuteAlways field.
+ struct DAGPredicateOperand {
+ std::vector<TreePatternNode*> AlwaysOps;
+ };
class DAGInstruction {
TreePattern *Pattern;
@@ -425,6 +430,7 @@ private:
std::map<Record*, std::pair<Record*, std::string> > SDNodeXForms;
std::map<Record*, ComplexPattern> ComplexPatterns;
std::map<Record*, TreePattern*> PatternFragments;
+ std::map<Record*, DAGPredicateOperand> PredicateOperands;
std::map<Record*, DAGInstruction> Instructions;
// Specific SDNode definitions:
@@ -479,6 +485,11 @@ public:
abort();
}
+ const DAGPredicateOperand &getPredicateOperand(Record *R) {
+ assert(PredicateOperands.count(R) &&"Isn't an analyzed predicate operand!");
+ return PredicateOperands.find(R)->second;
+ }
+
TreePattern *getPatternFragment(Record *R) const {
assert(PatternFragments.count(R) && "Invalid pattern fragment request!");
return PatternFragments.find(R)->second;
@@ -505,6 +516,7 @@ private:
void ParseNodeTransforms(std::ostream &OS);
void ParseComplexPatterns();
void ParsePatternFragments(std::ostream &OS);
+ void ParsePredicateOperands();
void ParseInstructions();
void ParsePatterns();
void GenerateVariants();
OpenPOWER on IntegriCloud