aboutsummaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-06-22 03:38:14 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-06-22 03:38:14 +0000
commit93109234b9e7c5ba50441bbfab3dad02a77f8787 (patch)
tree8fe55a83d5cbdffcf8e4b9a7c447141798a20c2b /include
parenta99507bc04f2c16e6de118795a63a074899df66b (diff)
downloadklee-93109234b9e7c5ba50441bbfab3dad02a77f8787.tar.gz
Store ConstantExpr's value as an APInt.
- In anticipation of supporting large constant values. git-svn-id: https://llvm.org/svn/llvm-project/klee/trunk@73871 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/klee/Expr.h19
1 files changed, 8 insertions, 11 deletions
diff --git a/include/klee/Expr.h b/include/klee/Expr.h
index 31bed1a8..49d612cc 100644
--- a/include/klee/Expr.h
+++ b/include/klee/Expr.h
@@ -14,6 +14,7 @@
#include "klee/util/Bits.h"
#include "klee/util/Ref.h"
+#include "llvm/ADT/APInt.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Support/Streams.h"
@@ -296,9 +297,9 @@ public:
static const unsigned numKids = 0;
private:
- uint64_t value;
+ llvm::APInt value;
- ConstantExpr(uint64_t v, Width w) : value(v), width(w) {}
+ ConstantExpr(uint64_t v, Width w) : value(w, v), width(w) {}
public:
Width width;
@@ -312,7 +313,7 @@ public:
unsigned getNumKids() const { return 0; }
ref<Expr> getKid(unsigned i) const { return 0; }
- uint64_t getConstantValue() const { return value; }
+ uint64_t getConstantValue() const { return value.getZExtValue(); }
/// getZExtValue - Return the constant value for a limited number of bits.
///
@@ -320,13 +321,13 @@ public:
/// is known to be limited to a certain number of bits.
uint64_t getZExtValue(unsigned bits = 64) const {
assert(getWidth() <= bits && "Value may be out of range!");
- return value;
+ return value.getZExtValue();
}
/// getLimitedValue - If this value is smaller than the specified limit,
/// return it, otherwise return the limit value.
uint64_t getLimitedValue(uint64_t Limit = ~0ULL) const {
- return (value > Limit) ? Limit : getZExtValue();
+ return value.getLimitedValue(Limit);
}
/// toString - Return the constant value as a decimal string.
@@ -335,13 +336,9 @@ public:
int compareContents(const Expr &b) const {
const ConstantExpr &cb = static_cast<const ConstantExpr&>(b);
if (width != cb.width) return width < cb.width ? -1 : 1;
- if (value < cb.value) {
- return -1;
- } else if (value > cb.value) {
- return 1;
- } else {
+ if (value == cb.value)
return 0;
- }
+ return value.ult(cb.value) ? -1 : 1;
}
virtual ref<Expr> rebuild(ref<Expr> kids[]) const {