Add a new bit that ImmLeaf's can opt into, which allows them to duck out of
[oota-llvm.git] / utils / TableGen / CodeGenDAGPatterns.h
index 2624495a8dc062dfed5e1db09cbb34b09544ddb0..e4e8574bbca2de4bbcdcaf7116116dfea2eb62cd 100644 (file)
@@ -249,7 +249,7 @@ class TreePredicateFn {
   TreePattern *PatFragRec;
 public:
   /// TreePredicateFn constructor.  Here 'N' is a subclass of PatFrag.
-  TreePredicateFn(TreePattern *N) : PatFragRec(N) {}
+  TreePredicateFn(TreePattern *N);
 
   
   TreePattern *getOrigPatFragRecord() const { return PatFragRec; }
@@ -257,6 +257,17 @@ public:
   /// isAlwaysTrue - Return true if this is a noop predicate.
   bool isAlwaysTrue() const;
   
+  bool isImmediatePattern() const { return !getImmCode().empty(); }
+  
+  /// getImmediatePredicateCode - Return the code that evaluates this pattern if
+  /// this is an immediate predicate.  It is an error to call this on a
+  /// non-immediate pattern.
+  std::string getImmediatePredicateCode() const {
+    std::string Result = getImmCode();
+    assert(!Result.empty() && "Isn't an immediate pattern!");
+    return Result;
+  }
+  
   
   bool operator==(const TreePredicateFn &RHS) const {
     return PatFragRec == RHS.PatFragRec;
@@ -276,6 +287,7 @@ public:
   
 private:
   std::string getPredCode() const;
+  std::string getImmCode() const;
 };