Move the space in overview output for commands out of each of the
[oota-llvm.git] / tools / llvm-upgrade / llvm-upgrade.cpp
index 9db8ee5f461c7b677c2d0528865d8ebc66a71de4..f7af675f4ac695be6a72535742fb4ea3e63d6824 100644 (file)
 //
 //===----------------------------------------------------------------------===//
 
-#include "ParserInternals.h"
+#include "UpgradeInternals.h"
+#include "llvm/Module.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/Support/SystemUtils.h"
 #include "llvm/System/Signals.h"
@@ -34,25 +36,35 @@ InputFilename(cl::Positional, cl::desc("<input .llvm file>"), cl::init("-"));
 
 static cl::opt<std::string>
 OutputFilename("o", cl::desc("Override output filename"),
-               cl::value_desc("filename"));
+               cl::value_desc("filename"), cl::init("-"));
 
 static cl::opt<bool>
-Force("f", cl::desc("Overwrite output files"));
+Force("f", cl::desc("Overwrite output files"), cl::init(false));
+
+static cl::opt<bool>
+AddAttrs("add-attrs", cl::desc("Add function result and argument attributes"),
+         cl::init(false));
+
+static cl::opt<bool>
+Debug("debug-upgrade-yacc", cl::desc("Print debug output from yacc parser"),
+      cl::Hidden, cl::init(false));
 
 int main(int argc, char **argv) {
-  cl::ParseCommandLineOptions(argc, argv, " llvm .ll -> .bc assembler\n");
+  llvm_shutdown_obj X;  // Call llvm_shutdown() on exit.
+  cl::ParseCommandLineOptions(argc, argv, "llvm .ll -> .bc assembler\n");
   sys::PrintStackTraceOnErrorSignal();
 
   int exitCode = 0;
   std::ostream *Out = 0;
+  std::istream *In = 0;
   try {
     if (OutputFilename != "") {   // Specified an output filename?
       if (OutputFilename != "-") {  // Not stdout?
         if (!Force && std::ifstream(OutputFilename.c_str())) {
           // If force is not specified, make sure not to overwrite a file!
-          llvm_cerr << argv[0] << ": error opening '" << OutputFilename
-                    << "': file exists!\n"
-                    << "Use -f command line argument to force output\n";
+          cerr << argv[0] << ": error opening '" << OutputFilename
+               << "': file exists!\n"
+               << "Use -f command line argument to force output\n";
           return 1;
         }
         Out = new std::ofstream(OutputFilename.c_str(), std::ios::out |
@@ -77,34 +89,52 @@ int main(int argc, char **argv) {
 
         if (!Force && std::ifstream(OutputFilename.c_str())) {
           // If force is not specified, make sure not to overwrite a file!
-          llvm_cerr << argv[0] << ": error opening '" << OutputFilename
-                    << "': file exists!\n"
-                    << "Use -f command line argument to force output\n";
+          cerr << argv[0] << ": error opening '" << OutputFilename
+               << "': file exists!\n"
+               << "Use -f command line argument to force output\n";
           return 1;
         }
 
         Out = new std::ofstream(OutputFilename.c_str(), std::ios::out |
-                                std::ios::trunc | std::ios::binary);
+                                std::ios::trunc);
         // Make sure that the Out file gets unlinked from the disk if we get a
         // SIGINT
         sys::RemoveFileOnSignal(sys::Path(OutputFilename));
       }
     }
 
+    if (InputFilename == "-") {
+      In = &std::cin;
+      InputFilename = "<stdin>";
+    } else {
+      In = new std::ifstream(InputFilename.c_str());
+    }
+
     if (!Out->good()) {
-      llvm_cerr << argv[0] << ": error opening " << OutputFilename << "!\n";
+      cerr << argv[0] << ": error opening " << OutputFilename << "!\n";
+      return 1;
+    }
+
+    if (!In->good()) {
+      cerr << argv[0] << ": error opening " << InputFilename << "!\n";
       return 1;
     }
 
-    UpgradeAssembly(InputFilename, *Out);
+    Module *M = UpgradeAssembly(InputFilename, *In, Debug, AddAttrs);
+    if (!M) {
+      cerr << argv[0] << ": No module returned from assembly parsing\n";
+      *Out << argv[0] << ": parse failed.";
+      exit(1);
+    }
+
+    // Finally, print the module on the output stream.
+    M->print(Out);
 
-    /*
   } catch (const std::string& caught_message) {
-    llvm_cerr << argv[0] << ": " << caught_message << "\n";
+    cerr << argv[0] << ": " << caught_message << "\n";
     exitCode = 1;
-    */
   } catch (...) {
-    llvm_cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
+    cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
     exitCode = 1;
   }