diff options
author | Chris Lattner <sabre@nondot.org> | 2006-11-04 05:12:02 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-11-04 05:12:02 +0000 |
commit | ed07f23c52fa0506cd5ab34604eb6742ddc06de8 (patch) | |
tree | 983c7faadbb38fc8bc9775245dd17627f0ef55b6 /llvm/utils/TableGen/DAGISelEmitter.h | |
parent | 1faa9097c7f283762b9ff263607fa096e36ce029 (diff) | |
download | bcm5719-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.h | 12 |
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(); |