aboutsummaryrefslogtreecommitdiff
path: root/lib/ExecutionEngine/Interpreter/Execution.cpp
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2007-05-16 02:05:13 +0000
committerReid Spencer <rspencer@reidspencer.com>2007-05-16 02:05:13 +0000
commit951418b7e9e109bb4330d2e901a553aad69637c8 (patch)
tree50d44f3a7dbe062ac712b2d3c3533c61d12ff2f8 /lib/ExecutionEngine/Interpreter/Execution.cpp
parent93003b8cf221f084e71e2b4033c41ff2cae6c36d (diff)
Implement printing of instruction result values when debug info is turned
on. This helps to speed up the debugging time by showing computational results as the program executes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37095 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/ExecutionEngine/Interpreter/Execution.cpp')
-rw-r--r--lib/ExecutionEngine/Interpreter/Execution.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp
index 4d6c0db105..8231001b32 100644
--- a/lib/ExecutionEngine/Interpreter/Execution.cpp
+++ b/lib/ExecutionEngine/Interpreter/Execution.cpp
@@ -1338,6 +1338,20 @@ void Interpreter::callFunction(Function *F,
StackFrame.VarArgs.assign(ArgVals.begin()+i, ArgVals.end());
}
+static void PrintGenericValue(const GenericValue &Val, const Type* Ty) {
+ switch (Ty->getTypeID()) {
+ default: assert(0 && "Invalid GenericValue Type");
+ case Type::VoidTyID: DOUT << "void"; break;
+ case Type::FloatTyID: DOUT << "float " << Val.FloatVal; break;
+ case Type::DoubleTyID: DOUT << "double " << Val.DoubleVal; break;
+ case Type::PointerTyID: DOUT << "void* " << unsigned(Val.PointerVal); break;
+ case Type::IntegerTyID:
+ DOUT << "i" << Val.IntVal.getBitWidth() << " " << Val.IntVal.toString(10)
+ << "\n";
+ break;
+ }
+}
+
void Interpreter::run() {
while (!ECStack.empty()) {
// Interpret a single instruction & increment the "PC".
@@ -1349,5 +1363,12 @@ void Interpreter::run() {
DOUT << "About to interpret: " << I;
visit(I); // Dispatch to one of the visit* methods...
+#ifndef NDEBUG
+ if (!isa<CallInst>(I) && !isa<InvokeInst>(I) &&
+ I.getType() != Type::VoidTy) {
+ DOUT << " --> ";
+ PrintGenericValue(SF.Values[&I], I.getType());
+ }
+#endif
}
}