Add proper support to send output to the right place
authorChris Lattner <sabre@nondot.org>
Wed, 19 Sep 2001 16:52:09 +0000 (16:52 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 19 Sep 2001 16:52:09 +0000 (16:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@649 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llc/llc.cpp

index b8bcb1d13125d389ddabe8484d56a3784285ba39..c4bdc4589d1002907546ca7a0079b8bb02024722 100644 (file)
 #include "llvm/Module.h"
 #include "llvm/Method.h"
 #include <memory>
+#include <fstream>
 
 cl::String InputFilename ("", "Input filename", cl::NoFlags, "-");
 cl::String OutputFilename("o", "Output filename", cl::NoFlags, "");
+cl::Flag   Force         ("f", "Overwrite output files", cl::NoFlags, false);
 
 
 //-------------------------- Internal Functions -----------------------------//
 
-static void NormalizeMethod(Method* method) {
-  NormalizePhiConstantArgs(method);
+static void NormalizeMethod(Method *M) {
+  NormalizePhiConstantArgs(M);
 }
 
 
@@ -57,7 +59,38 @@ int main(int argc, char **argv) {
     }
   }
   
-  Target->emitAssembly(M.get(), cout);
+  // Figure out where we are going to send the output...
+  ostream *Out = 0;
+  if (OutputFilename != "") {   // Specified an output filename?
+    Out = new ofstream(OutputFilename.c_str(), 
+                       (Force ? 0 : ios::noreplace)|ios::out);
+  } else {
+    if (InputFilename == "-") {
+      OutputFilename = "-";
+      Out = &cout;
+    } else {
+      string IFN = InputFilename;
+      int Len = IFN.length();
+      if (IFN[Len-3] == '.' && IFN[Len-2] == 'b' && IFN[Len-1] == 'c') {
+        OutputFilename = string(IFN.begin(), IFN.end()-3); // s/.bc/.s/
+      } else {
+        OutputFilename = IFN;   // Append a .s to it
+      }
+      OutputFilename += ".s";
+      Out = new ofstream(OutputFilename.c_str(), 
+                         (Force ? 0 : ios::noreplace)|ios::out);
+      if (!Out->good()) {
+        cerr << "Error opening " << OutputFilename << "!\n";
+        delete Out;
+        return 1;
+      }
+    }
+  }
+
+  // Emit the output...
+  Target->emitAssembly(M.get(), *Out);
+
+  if (Out != &cout) delete Out;
   return 0;
 }