diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-06-01 15:47:52 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-06-01 15:47:52 +0000 |
commit | aca72ee7ebadf396d815f6c4983697e76e408268 (patch) | |
tree | 164f9491e7377e3c29c3b8e84105c04584998cf7 /lib/Core/Executor.h | |
parent | 489f3d421c525123baabd021da9a546b4f100d80 (diff) | |
download | klee-aca72ee7ebadf396d815f6c4983697e76e408268.tar.gz |
Modify eval() to return a cell reference instead of its contents.
Add get{Dest,Argument}Cell for computing the cell to store instructions results and arguments into, respectuvely. Prep for moving fast path constant evaluation out of the Expr libraary itself. git-svn-id: https://llvm.org/svn/llvm-project/klee/trunk@72692 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Core/Executor.h')
-rw-r--r-- | lib/Core/Executor.h | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/lib/Core/Executor.h b/lib/Core/Executor.h index 9fa63a04..852d4cc6 100644 --- a/lib/Core/Executor.h +++ b/lib/Core/Executor.h @@ -15,7 +15,11 @@ #ifndef KLEE_EXECUTOR_H #define KLEE_EXECUTOR_H +#include "klee/ExecutionState.h" #include "klee/Interpreter.h" +#include "klee/Internal/Module/Cell.h" +#include "klee/Internal/Module/KInstruction.h" +#include "klee/Internal/Module/KModule.h" #include "llvm/Support/CallSite.h" #include <vector> #include <string> @@ -38,6 +42,7 @@ namespace llvm { } namespace klee { + class Cell; class ExecutionState; class ExternalDispatcher; class Expr; @@ -288,10 +293,20 @@ private: // Used for testing. ref<Expr> replaceReadWithSymbolic(ExecutionState &state, ref<Expr> e); - ref<Expr> eval(KInstruction *ki, - unsigned index, - ExecutionState &state); - + const Cell& eval(KInstruction *ki, unsigned index, + ExecutionState &state) const; + + Cell& getArgumentCell(ExecutionState &state, + KFunction *kf, + unsigned index) { + return state.stack.back().locals[kf->getArgRegister(index)]; + } + + Cell& getDestCell(ExecutionState &state, + KInstruction *target) { + return state.stack.back().locals[target->dest]; + } + void bindLocal(KInstruction *target, ExecutionState &state, ref<Expr> value); |