Added pretty-printing support for lval::SymIntConstraintVal and
nonlval::SymIntConstraintVal.

Reworked transfer function for '==' and '!=' for LValues to return
SymIntConstraintVal when comparing a symbol with a constant.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46778 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Analysis/RValues.h b/Analysis/RValues.h
index 1db0a18..9c788ca 100644
--- a/Analysis/RValues.h
+++ b/Analysis/RValues.h
@@ -339,7 +339,7 @@
     : NonLValue(SymbolValKind,
                 reinterpret_cast<void*>((uintptr_t) SymID)) {}
     
-    SymbolID getSymbolID() const {
+    SymbolID getSymbol() const {
       return (SymbolID) reinterpret_cast<uintptr_t>(getRawPtr());
     }
     
@@ -442,6 +442,7 @@
 namespace lval {
   
   enum Kind { SymbolValKind,
+              SymIntConstraintValKind,
               DeclValKind,
               ConcreteIntKind,
               NumKind };
@@ -451,7 +452,7 @@
     SymbolVal(unsigned SymID)
     : LValue(SymbolValKind, reinterpret_cast<void*>((uintptr_t) SymID)) {}
     
-    SymbolID getSymbolID() const {
+    SymbolID getSymbol() const {
       return (SymbolID) reinterpret_cast<uintptr_t>(getRawPtr());
     }
     
@@ -459,6 +460,20 @@
       return V->getSubKind() == SymbolValKind;
     }  
   };
+  
+  class SymIntConstraintVal : public LValue {    
+  public:
+    SymIntConstraintVal(const SymIntConstraint& C)
+    : LValue(SymIntConstraintValKind, reinterpret_cast<const void*>(&C)) {}
+    
+    const SymIntConstraint& getConstraint() const {
+      return *reinterpret_cast<SymIntConstraint*>(getRawPtr());
+    }
+    
+    static inline bool classof(const RValue* V) {
+      return isa<LValue>(V) && V->getSubKind() == SymIntConstraintValKind;
+    }    
+  };
 
   class DeclVal : public LValue {
   public: