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: