From 43e3f7c9627d0793a31a9457d3bbbe4d8d56d331 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 27 Oct 2001 08:43:52 +0000 Subject: [PATCH] Implement a -trace command line option and a trace option in the interpreter. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@989 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/ExecutionEngine/Interpreter/Execution.cpp | 3 +++ lib/ExecutionEngine/Interpreter/Interpreter.h | 2 ++ lib/ExecutionEngine/Interpreter/UserInput.cpp | 16 +++++++++++++++- tools/lli/lli.cpp | 6 +++++- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp index a7ded5b705b..1d7ec7aa8ee 100644 --- a/lib/ExecutionEngine/Interpreter/Execution.cpp +++ b/lib/ExecutionEngine/Interpreter/Execution.cpp @@ -834,6 +834,9 @@ bool Interpreter::executeInstruction() { ExecutionContext &SF = ECStack.back(); // Current stack frame Instruction *I = *SF.CurInst++; // Increment before execute + if (Trace) + cout << "Run:" << I; + if (I->isBinaryOp()) { executeBinaryInst((BinaryOperator*)I, SF); } else { diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.h b/lib/ExecutionEngine/Interpreter/Interpreter.h index 16cc569ad0f..2d262aedc5d 100644 --- a/lib/ExecutionEngine/Interpreter/Interpreter.h +++ b/lib/ExecutionEngine/Interpreter/Interpreter.h @@ -56,6 +56,7 @@ class Interpreter { Module *CurMod; // The current Module being executed (0 if none) int ExitCode; // The exit code to be returned by the lli util bool Profile; // Profiling enabled? + bool Trace; // Tracing enabled? int CurFrame; // The current stack frame being inspected // The runtime stack of executing code. The top of the stack is the current @@ -72,6 +73,7 @@ public: // enableProfiling() - Turn profiling on, clear stats? void enableProfiling() { Profile = true; } + void enableTracing() { Trace = true; } void initializeExecutionEngine(); void handleUserInput(); diff --git a/lib/ExecutionEngine/Interpreter/UserInput.cpp b/lib/ExecutionEngine/Interpreter/UserInput.cpp index a24b3117506..97bba9cf7dc 100644 --- a/lib/ExecutionEngine/Interpreter/UserInput.cpp +++ b/lib/ExecutionEngine/Interpreter/UserInput.cpp @@ -16,7 +16,8 @@ enum CommandID { Print, Info, List, StackTrace, Up, Down, // Inspection Next, Step, Run, Finish, Call, // Control flow changes Break, Watch, // Debugging - Load, Flush + Load, Flush, + TraceOpt, ProfileOpt // Toggle features }; // CommandTable - Build a lookup table for the commands available to the user... @@ -52,6 +53,9 @@ static struct CommandTableElement { { "load" , Load }, { "flush" , Flush }, + + { "trace" , TraceOpt }, + { "profile" , ProfileOpt }, }; static CommandTableElement *CommandTableEnd = CommandTable+sizeof(CommandTable)/sizeof(CommandTable[0]); @@ -118,6 +122,16 @@ void Interpreter::handleUserInput() { finish(); // Run until it's complete break; + case TraceOpt: + Trace = !Trace; + cout << "Tracing " << (Trace ? "enabled\n" : "disabled\n"); + break; + + case ProfileOpt: + Profile = !Profile; + cout << "Profiling " << (Trace ? "enabled\n" : "disabled\n"); + break; + default: cout << "Command '" << Command << "' unimplemented!\n"; break; diff --git a/tools/lli/lli.cpp b/tools/lli/lli.cpp index 29d45d68306..798c5005f6c 100644 --- a/tools/lli/lli.cpp +++ b/tools/lli/lli.cpp @@ -14,12 +14,15 @@ cl::StringList InputArgv("" , "Input command line", cl::ConsumeAfter); cl::String MainFunction ("f" , "Function to execute", cl::NoFlags, "main"); cl::Flag DebugMode ("debug" , "Start program in debugger"); cl::Alias DebugModeA ("d" , "Alias for -debug", cl::NoFlags, DebugMode); +cl::Flag TraceMode ("trace" , "Enable Tracing"); cl::Flag ProfileMode ("profile", "Enable Profiling [unimp]"); + //===----------------------------------------------------------------------===// // Interpreter ctor - Initialize stuff // -Interpreter::Interpreter() : ExitCode(0), Profile(ProfileMode), CurFrame(-1) { +Interpreter::Interpreter() : ExitCode(0), Profile(ProfileMode), + Trace(TraceMode), CurFrame(-1) { CurMod = 0; loadModule(InputArgv.size() ? InputArgv[0] : ""); @@ -46,6 +49,7 @@ int main(int argc, char** argv) { // If running with the profiler, enable it now... if (ProfileMode) I.enableProfiling(); + if (TraceMode) I.enableTracing(); // Start interpreter into the main function... //