diff options
author | Chris Lattner <sabre@nondot.org> | 2008-07-08 17:25:49 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-07-08 17:25:49 +0000 |
commit | 663ceeb948c526c705b38efd2075b7c80a190e5d (patch) | |
tree | 6671effb61ca027fd8af6286d60e0b35f133f487 /lib/ExecutionEngine/Interpreter/Execution.cpp | |
parent | 710429645ac0327dbe83ceab040fe04d2cfff605 (diff) | |
download | external_llvm-663ceeb948c526c705b38efd2075b7c80a190e5d.zip external_llvm-663ceeb948c526c705b38efd2075b7c80a190e5d.tar.gz external_llvm-663ceeb948c526c705b38efd2075b7c80a190e5d.tar.bz2 |
Add a new hidden option to the interpreter to cause it to print
out every volatile load and store. This is useful for tracking
down insane volatile memory bugs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53241 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/Interpreter/Execution.cpp')
-rw-r--r-- | lib/ExecutionEngine/Interpreter/Execution.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp index d05e8d0..29837ff 100644 --- a/lib/ExecutionEngine/Interpreter/Execution.cpp +++ b/lib/ExecutionEngine/Interpreter/Execution.cpp @@ -21,6 +21,7 @@ #include "llvm/Support/GetElementPtrTypeIterator.h" #include "llvm/ADT/APInt.h" #include "llvm/ADT/Statistic.h" +#include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/MathExtras.h" #include <algorithm> @@ -31,6 +32,9 @@ using namespace llvm; STATISTIC(NumDynamicInsts, "Number of dynamic instructions executed"); static Interpreter *TheEE = 0; +static cl::opt<bool> PrintVolatile("interpreter-print-volatile", cl::Hidden, + cl::desc("make the interpreter print every volatile load and store")); + //===----------------------------------------------------------------------===// // Various Helper Functions //===----------------------------------------------------------------------===// @@ -830,6 +834,8 @@ void Interpreter::visitLoadInst(LoadInst &I) { GenericValue Result; LoadValueFromMemory(Result, Ptr, I.getType()); SetValue(&I, Result, SF); + if (I.isVolatile() && PrintVolatile) + cerr << "Volatile load " << I; } void Interpreter::visitStoreInst(StoreInst &I) { @@ -838,6 +844,8 @@ void Interpreter::visitStoreInst(StoreInst &I) { GenericValue SRC = getOperandValue(I.getPointerOperand(), SF); StoreValueToMemory(Val, (GenericValue *)GVTOP(SRC), I.getOperand(0)->getType()); + if (I.isVolatile() && PrintVolatile) + cerr << "Volatile store: " << I; } //===----------------------------------------------------------------------===// |