Change various llvm utilities to use PrettyStackTraceProgram in
authorChris Lattner <sabre@nondot.org>
Fri, 6 Mar 2009 05:34:10 +0000 (05:34 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 6 Mar 2009 05:34:10 +0000 (05:34 +0000)
their main routines.  This makes the tools print their argc/argv
commands if they crash.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66248 91177308-0d34-0410-b5e6-96231b3b80d8

16 files changed:
lib/Transforms/Scalar/JumpThreading.cpp
tools/bugpoint/bugpoint.cpp
tools/llc/llc.cpp
tools/lli/lli.cpp
tools/llvm-ar/llvm-ar.cpp
tools/llvm-as/llvm-as.cpp
tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp
tools/llvm-db/llvm-db.cpp
tools/llvm-dis/llvm-dis.cpp
tools/llvm-extract/llvm-extract.cpp
tools/llvm-ld/llvm-ld.cpp
tools/llvm-link/llvm-link.cpp
tools/llvm-nm/llvm-nm.cpp
tools/llvm-prof/llvm-prof.cpp
tools/llvm-ranlib/llvm-ranlib.cpp
utils/TableGen/TableGen.cpp

index f96fc208ae1901f64fb75dc31a1e3e45499b66a3..1f3e6b11c83a155fa956f603fde22c7e845f9f73 100644 (file)
@@ -407,6 +407,12 @@ bool JumpThreading::ProcessBranchOnDuplicateCond(BasicBlock *PredBB,
   return true;
 }
 
+struct APIntUnsignedOrdering {
+  bool operator()(const APInt &LHS, const APInt &RHS) const {
+    return LHS.ult(RHS);
+  }
+};
+
 /// ProcessSwitchOnDuplicateCond - We found a block and a predecessor of that
 /// block that switch on exactly the same condition.  This means that we almost
 /// always know the direction of the edge in the DESTBB:
@@ -474,6 +480,34 @@ bool JumpThreading::ProcessSwitchOnDuplicateCond(BasicBlock *PredBB,
       return true;
   }
   
+#if 0
+  // Figure out on which of the condition allow us to get to DESTBB.  If DESTBB
+  // is the default label, we compute the set of values COND is known not to be
+  // otherwise we compute the set of options that COND could be.
+  SmallVector<APInt, 16> KnownValues;
+  bool DestBBIsDefault = PredSI->getSuccessor(0) == DestBB;
+  
+  if (DestBBIsDefault) {
+    // DestBB the default case.  Collect the values where PredBB can't branch to
+    // DestBB.
+    for (unsigned i = 1/*skip default*/, e = PredSI->getNumCases(); i != e; ++i)
+      if (PredSI->getSuccessor(i) != DestBB)
+        KnownValues.push_back(PredSI->getCaseValue(i)->getValue());
+  } else {
+    // Not the default case.  Collect the values where PredBB can branch to
+    // DestBB.
+    for (unsigned i = 1/*skip default*/, e = PredSI->getNumCases(); i != e; ++i)
+      if (PredSI->getSuccessor(i) == DestBB)
+        KnownValues.push_back(PredSI->getCaseValue(i)->getValue());
+  }
+  
+  std::sort(KnownValues.begin(), KnownValues.end(), APIntUnsignedOrdering());
+  return false;
+  cerr << "\nFOUND THREAD BLOCKS:\n";
+  PredBB->dump();
+  DestBB->dump();
+#endif
+  
   return false;
 }
 
index 587077eb7033852e0bff7396bf25cdd0352f839a..543512ce6249d1727f8e509715e8f35fdc140fcc 100644 (file)
@@ -20,6 +20,7 @@
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/PluginLoader.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/System/Process.h"
 #include "llvm/System/Signals.h"
 #include "llvm/LinkAllVMCore.h"
@@ -64,12 +65,13 @@ static void BugpointInterruptFunction() {
 }
 
 int main(int argc, char **argv) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
+  llvm::sys::PrintStackTraceOnErrorSignal();
+  llvm::PrettyStackTraceProgram X(argc, argv);
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
   cl::ParseCommandLineOptions(argc, argv,
                               "LLVM automatic testcase reducer. See\nhttp://"
                               "llvm.org/cmds/bugpoint.html"
                               " for more information.\n");
-  sys::PrintStackTraceOnErrorSignal();
   sys::SetInterruptFunction(BugpointInterruptFunction);
   
   BugDriver D(argv[0], AsChild, FindBugs, TimeoutValue, MemoryLimit);
index 087a77097be2b951fc81dd4135569a9b6de879d5..c80e9296e831f7483b3be27c8e96becdad9a806a 100644 (file)
@@ -31,6 +31,7 @@
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/PluginLoader.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/RegistryParser.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/Analysis/Verifier.h"
@@ -192,9 +193,10 @@ static raw_ostream *GetOutputStream(const char *ProgName) {
 // main - Entry point for the llc compiler.
 //
 int main(int argc, char **argv) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
-  cl::ParseCommandLineOptions(argc, argv, "llvm system compiler\n");
   sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
+  cl::ParseCommandLineOptions(argc, argv, "llvm system compiler\n");
 
   // Load the module to be compiled...
   std::string ErrorMessage;
index fee48ed2101803374bd3b7586a04e8e1b11bf798..d62d33209850832c9c743267003d9857aa7c445d 100644 (file)
@@ -25,6 +25,7 @@
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/PluginLoader.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/System/Process.h"
 #include "llvm/System/Signals.h"
 #include <iostream>
@@ -83,10 +84,12 @@ static void do_shutdown() {
 // main Driver function
 //
 int main(int argc, char **argv, char * const *envp) {
+  sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  
   atexit(do_shutdown);  // Call llvm_shutdown() on exit.
   cl::ParseCommandLineOptions(argc, argv,
                               "llvm interpreter & dynamic compiler\n");
-  sys::PrintStackTraceOnErrorSignal();
 
   // If the user doesn't want core files, disable them.
   if (DisableCoreFiles)
index 766d91cbd9c418aae6b574e5ef4d21c26a7bf056..5d81fc7cf3886d8bfdfb485f4e0e6c405994d812 100644 (file)
@@ -16,6 +16,7 @@
 #include "llvm/Bitcode/Archive.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/System/Signals.h"
 #include <iostream>
 #include <algorithm>
@@ -686,7 +687,10 @@ doReplaceOrInsert(std::string* ErrMsg) {
 
 // main - main program for llvm-ar .. see comments in the code
 int main(int argc, char **argv) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
+  // Print a stack trace if we signal out.
+  sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
 
   // Have the command line options parsed and handle things
   // like --help and --version.
@@ -695,9 +699,6 @@ int main(int argc, char **argv) {
     "  This program archives bitcode files into single libraries\n"
   );
 
-  // Print a stack trace if we signal out.
-  sys::PrintStackTraceOnErrorSignal();
-
   int exitCode = 0;
 
   // Make sure we don't exit with "unhandled exception".
index 72e32972d2ceb0a6d06e24f61afe4c90c7b0edb0..79ece8f106f49708b256866ab6cfc73a7f2b12db 100644 (file)
@@ -21,6 +21,7 @@
 #include "llvm/Bitcode/ReaderWriter.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/Support/SystemUtils.h"
 #include "llvm/Support/raw_ostream.h"
@@ -51,9 +52,11 @@ DisableVerify("disable-verify", cl::Hidden,
               cl::desc("Do not run verifier on input LLVM (dangerous!)"));
 
 int main(int argc, char **argv) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
-  cl::ParseCommandLineOptions(argc, argv, "llvm .ll -> .bc assembler\n");
+  // Print a stack trace if we signal out.
   sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
+  cl::ParseCommandLineOptions(argc, argv, "llvm .ll -> .bc assembler\n");
 
   int exitCode = 0;
   std::ostream *Out = 0;
index 4f1e9e81c7e4722c75c4d1dfc7d6a5d803945b0b..623bcaeae7b525f407ec42cd10e2b5e6848dcdc2 100644 (file)
@@ -33,6 +33,7 @@
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/System/Signals.h"
 #include <map>
 #include <fstream>
@@ -501,10 +502,11 @@ static int AnalyzeBitcode() {
 
 
 int main(int argc, char **argv) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
-  cl::ParseCommandLineOptions(argc, argv, "llvm-bcanalyzer file analyzer\n");
-  
+  // Print a stack trace if we signal out.
   sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
+  cl::ParseCommandLineOptions(argc, argv, "llvm-bcanalyzer file analyzer\n");
   
   return AnalyzeBitcode();
 }
index a4e8b526cef7dddb56cba0e0435d2567de2046e5..04e616227b240c0dc5381c75bc0b0a3d765508bc 100644 (file)
@@ -15,6 +15,7 @@
 #include "CLIDebugger.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/System/Signals.h"
 #include <iostream>
 using namespace llvm;
@@ -49,12 +50,15 @@ namespace {
 // main Driver function
 //
 int main(int argc, char **argv, char * const *envp) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
+  // Print a stack trace if we signal out.
+  sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
   std::cout << "NOTE: llvm-db is known useless right now.\n";
   try {
     cl::ParseCommandLineOptions(argc, argv,
                                 "llvm source-level debugger\n");
-    sys::PrintStackTraceOnErrorSignal();
 
     if (!Quiet)
       std::cout << "llvm-db: The LLVM source-level debugger\n";
index 89f19e1daee27c4fb9777970dd356a79f4e2513f..471e5e2f5d2c8c8a2f64f5320f849db65172124c 100644 (file)
@@ -23,6 +23,7 @@
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/System/Signals.h"
@@ -45,10 +46,13 @@ static cl::opt<bool>
 DontPrint("disable-output", cl::desc("Don't output the .ll file"), cl::Hidden);
 
 int main(int argc, char **argv) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
+  // Print a stack trace if we signal out.
+  sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
   try {
     cl::ParseCommandLineOptions(argc, argv, "llvm .bc -> .ll disassembler\n");
-    sys::PrintStackTraceOnErrorSignal();
 
     std::ostream *Out = &std::cout;  // Default to printing to stdout.
     std::string ErrorMessage;
index 360630b41dc049013915707fb2748ddcbde0d690..014d231a29c4d34d049c4d66bef5f4c361bf9c4e 100644 (file)
@@ -20,6 +20,7 @@
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/System/Signals.h"
 #include <iostream>
 #include <memory>
@@ -56,9 +57,12 @@ ExtractGlobal("glob", cl::desc("Specify global to extract"), cl::init(""),
               cl::value_desc("global"));
 
 int main(int argc, char **argv) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
-  cl::ParseCommandLineOptions(argc, argv, "llvm extractor\n");
+  // Print a stack trace if we signal out.
   sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
+  cl::ParseCommandLineOptions(argc, argv, "llvm extractor\n");
 
   std::auto_ptr<Module> M;
   
index 28187c932db2ea48d558c7c37b7d7baa820720ec..fd2e0f7cac2501dc2b4c55cf88c6e2d8ce6621ea 100644 (file)
@@ -33,6 +33,7 @@
 #include "llvm/Support/FileUtilities.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/Support/SystemUtils.h"
 #include "llvm/System/Signals.h"
@@ -501,14 +502,17 @@ extern void Optimize(Module*);
 }
 
 int main(int argc, char **argv, char **envp) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
+  // Print a stack trace if we signal out.
+  sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
   try {
     // Initial global variable above for convenience printing of program name.
     progname = sys::Path(argv[0]).getBasename();
 
     // Parse the command line options
     cl::ParseCommandLineOptions(argc, argv, "llvm linker\n");
-    sys::PrintStackTraceOnErrorSignal();
 
     // Construct a Linker (now that Verbose is set)
     Linker TheLinker(progname, OutputFilename, Verbose);
index 8c6541ff0f39131c79efccd721f641d9ead11215..15850f4717e387f1bade550ee02f456842f3643d 100644 (file)
@@ -19,6 +19,7 @@
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/System/Signals.h"
 #include "llvm/System/Path.h"
@@ -79,10 +80,12 @@ static inline std::auto_ptr<Module> LoadFile(const std::string &FN) {
 }
 
 int main(int argc, char **argv) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
-  cl::ParseCommandLineOptions(argc, argv, "llvm linker\n");
+  // Print a stack trace if we signal out.
   sys::PrintStackTraceOnErrorSignal();
-  assert(InputFilenames.size() > 0 && "OneOrMore is not working");
+  PrettyStackTraceProgram X(argc, argv);
+  
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
+  cl::ParseCommandLineOptions(argc, argv, "llvm linker\n");
 
   unsigned BaseArg = 0;
   std::string ErrorMessage;
index ca4654d7931c21ba10ded69ea61e5b0f52b288ff..344951051e83767f6fa207553b1c5f681cc4aefd 100644 (file)
@@ -22,6 +22,7 @@
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/System/Signals.h"
 #include <algorithm>
 #include <cctype>
@@ -166,9 +167,12 @@ static void DumpSymbolNamesFromFile(std::string &Filename) {
 }
 
 int main(int argc, char **argv) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
-  cl::ParseCommandLineOptions(argc, argv, "llvm symbol table dumper\n");
+  // Print a stack trace if we signal out.
   sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
+  cl::ParseCommandLineOptions(argc, argv, "llvm symbol table dumper\n");
 
   ToolName = argv[0];
   if (BSDFormat) OutputFormat = bsd;
index 81498752186d071572ea50cf4caf41056dbf82c5..119dc1a1178c5d893b31c2d71fa4bc677512d901 100644 (file)
@@ -21,6 +21,7 @@
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/System/Signals.h"
 #include <algorithm>
@@ -111,10 +112,13 @@ namespace {
 
 
 int main(int argc, char **argv) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
+  // Print a stack trace if we signal out.
+  sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
   try {
     cl::ParseCommandLineOptions(argc, argv, "llvm profile dump decoder\n");
-    sys::PrintStackTraceOnErrorSignal();
 
     // Read in the bitcode file...
     std::string ErrorMessage;
index cd17be890a2413f9559e944f16b20806b1326c8b..72106104c0067f22f8b93ab5e6b0334db212aab6 100644 (file)
@@ -15,6 +15,7 @@
 #include "llvm/Bitcode/Archive.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/System/Signals.h"
 #include <iostream>
 #include <iomanip>
@@ -42,7 +43,11 @@ void printSymbolTable(Archive* TheArchive) {
 }
 
 int main(int argc, char **argv) {
-  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
+  // Print a stack trace if we signal out.
+  llvm::sys::PrintStackTraceOnErrorSignal();
+  llvm::PrettyStackTraceProgram X(argc, argv);
+  
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
 
   // Have the command line options parsed and handle things
   // like --help and --version.
@@ -52,9 +57,6 @@ int main(int argc, char **argv) {
     "  to an LLVM archive file."
   );
 
-  // Print a stack trace if we signal out.
-  sys::PrintStackTraceOnErrorSignal();
-
   int exitCode = 0;
 
   // Make sure we don't exit with "unhandled exception".
index 98a188ed837189452fb177cf82cc446535e4440c..147db12cf12a7938fd0bda13374b4fdd9832662f 100644 (file)
@@ -22,6 +22,7 @@
 #include "llvm/System/Signals.h"
 #include "llvm/Support/FileUtilities.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "CallingConvEmitter.h"
 #include "CodeEmitterGen.h"
 #include "RegisterInfoEmitter.h"
@@ -130,6 +131,8 @@ static bool ParseFile(const std::string &Filename,
 }
 
 int main(int argc, char **argv) {
+  sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
   cl::ParseCommandLineOptions(argc, argv);
 
   // Parse the input file.