From b2ac1e76b470458b88e7c5c085b4cb1f5443bd99 Mon Sep 17 00:00:00 2001 From: "Vikram S. Adve" Date: Thu, 18 Oct 2001 13:51:20 +0000 Subject: [PATCH] Trace code should always be exported just before code generation; this is not a debugging option. But we can export it as assembly instead of bytecode if -debugtrace is specified. llvm-svn: 889 --- llvm/tools/llc/Makefile | 2 +- llvm/tools/llc/llc.cpp | 53 ++++++++++++++++++++++------------------- 2 files changed, 29 insertions(+), 26 deletions(-) diff --git a/llvm/tools/llc/Makefile b/llvm/tools/llc/Makefile index 3df1a7716664..73efe6526096 100644 --- a/llvm/tools/llc/Makefile +++ b/llvm/tools/llc/Makefile @@ -1,6 +1,6 @@ LEVEL = ../.. TOOLNAME = llc -USEDLIBS = sparc regalloc sched select sparc regalloc sched select target opt instrument livevar bcreader vmcore asmwriter analysis support transforms +USEDLIBS = sparc regalloc sched select sparc regalloc sched select target opt instrument livevar bcreader bcwriter vmcore asmwriter analysis support transforms include $(LEVEL)/Makefile.common diff --git a/llvm/tools/llc/llc.cpp b/llvm/tools/llc/llc.cpp index 297e95c111bd..358f95b43a89 100644 --- a/llvm/tools/llc/llc.cpp +++ b/llvm/tools/llc/llc.cpp @@ -27,9 +27,8 @@ cl::Flag DoNotEmitAssembly("noasm", "Do not emit assembly code", cl::Hidden); cl::Flag TraceBBValues ("trace", "Trace values at basic block and method exits"); cl::Flag TraceMethodValues("tracem", "Trace values only at method exits"); -cl::Flag DebugTrace ("dumptrace", - "output trace code to a .trace.ll file", - cl::Hidden); +cl::Flag DebugTrace ("debugtrace", + "output trace code as assembly instead of bytecode"); // GetFileNameRoot - Helper function to get the basename of a filename... @@ -104,6 +103,7 @@ public: //===---------------------------------------------------------------------===// int main(int argc, char **argv) { + int retCode = 0; cl::ParseCommandLineOptions(argc, argv, " llvm system compiler\n"); // Allocate a target... in the future this will be controllable on the @@ -130,30 +130,33 @@ int main(int argc, char **argv) { Passes.push_back(new HoistPHIConstants()); if (TraceBBValues || TraceMethodValues) // If tracing enabled... - // Insert trace code in all methods in the module - Passes.push_back(new InsertTraceCode(TraceBBValues, - TraceBBValues || TraceMethodValues)); - - - if (DebugTrace) { // If Trace Debugging is enabled... - // Then write the module with tracing code out in assembly form - assert(InputFilename != "-" && "files on stdin not supported with tracing"); - string traceFileName = GetFileNameRoot(InputFilename) + ".trace.ll"; - - ostream *os = new ofstream(traceFileName.c_str(), - (Force ? 0 : ios::noreplace)|ios::out); - if (!os->good()) { - cerr << "Error opening " << traceFileName << "!\n"; - delete os; - return 1; + { + // Insert trace code in all methods in the module + Passes.push_back(new InsertTraceCode(TraceBBValues, + TraceBBValues ||TraceMethodValues)); + + // Then write out the module with tracing code before code generation + assert(InputFilename != "-" && + "files on stdin not supported with tracing"); + string traceFileName = GetFileNameRoot(InputFilename) + + (DebugTrace? ".trace.ll" : ".trace.bc"); + ostream *os = new ofstream(traceFileName.c_str(), + (Force ? 0 : ios::noreplace)|ios::out); + if (!os->good()) { + cerr << "Error opening " << traceFileName + << "! SKIPPING OUTPUT OF TRACE CODE\n"; + delete os; + retCode = 1; + } + + Passes.push_back(new PrintModulePass("", os, + /*deleteStream*/ true, + /*printAsBytecode*/ ! DebugTrace)); } - - Passes.push_back(new PrintModulePass("", os, true)); - } - + // If LLVM dumping after transformations is requested, add it to the pipeline if (DumpAsm) - Passes.push_back(new PrintModulePass("Method after xformations: \n",&cerr)); + Passes.push_back(new PrintModulePass("Code after xformations: \n",&cerr)); // Generate Target code... Passes.push_back(new GenerateCodeForTarget(Target)); @@ -189,7 +192,7 @@ int main(int argc, char **argv) { // runAllPasses frees the Pass objects after runAllPasses completes. Pass::runAllPassesAndFree(M.get(), Passes); - return 0; + return retCode; }