From 2528d63ba77642cb0d6a6a1229031fbc2007d556 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 8 Jul 2008 17:25:49 +0000 Subject: 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. llvm-svn: 53241 --- llvm/lib/ExecutionEngine/Interpreter/Execution.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'llvm/lib/ExecutionEngine/Interpreter/Execution.cpp') diff --git a/llvm/lib/ExecutionEngine/Interpreter/Execution.cpp b/llvm/lib/ExecutionEngine/Interpreter/Execution.cpp index d05e8d0..29837ff 100644 --- a/llvm/lib/ExecutionEngine/Interpreter/Execution.cpp +++ b/llvm/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 @@ -31,6 +32,9 @@ using namespace llvm; STATISTIC(NumDynamicInsts, "Number of dynamic instructions executed"); static Interpreter *TheEE = 0; +static cl::opt 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; } //===----------------------------------------------------------------------===// -- cgit v1.1