Implement a -trace command line option and a trace option in the interpreter.
authorChris Lattner <sabre@nondot.org>
Sat, 27 Oct 2001 08:43:52 +0000 (08:43 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 27 Oct 2001 08:43:52 +0000 (08:43 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@989 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/Interpreter/Execution.cpp
lib/ExecutionEngine/Interpreter/Interpreter.h
lib/ExecutionEngine/Interpreter/UserInput.cpp
tools/lli/lli.cpp

index a7ded5b705b6f1dd840540a3f5f74d39def042ec..1d7ec7aa8ee8788cce3562543fb1588eeafd2e18 100644 (file)
@@ -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 {
index 16cc569ad0ffa53a30801287d785e2e6884ed261..2d262aedc5d36afedcdd9e839384a6683828ca2b 100644 (file)
@@ -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();
index a24b31175063d149ca1b0694e2035c585db7cd70..97bba9cf7dcdfe30e6605311d952be225fccdeed 100644 (file)
@@ -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;
index 29d45d68306191aadf8fbd61aa513abd6231f169..798c5005f6cc7157b894ed167ffbbaaff9c0a7f7 100644 (file)
@@ -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...
   //