Avoid calling outs() and fouts() when the stream isn't really needed.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104873 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp
index f3eed56..199a1a9 100644
--- a/tools/llc/llc.cpp
+++ b/tools/llc/llc.cpp
@@ -124,7 +124,8 @@
                                               const char *ProgName) {
   if (OutputFilename != "") {
     if (OutputFilename == "-")
-      return &fouts();
+      return new formatted_raw_ostream(outs(),
+                                       formatted_raw_ostream::PRESERVE_STREAM);
 
     // Make sure that the Out file gets unlinked from the disk if we get a
     // SIGINT
@@ -147,7 +148,8 @@
 
   if (InputFilename == "-") {
     OutputFilename = "-";
-    return &fouts();
+    return new formatted_raw_ostream(outs(),
+                                     formatted_raw_ostream::PRESERVE_STREAM);
   }
 
   OutputFilename = GetFileNameRoot(InputFilename);
@@ -332,7 +334,7 @@
                                  DisableVerify)) {
     errs() << argv[0] << ": target does not support generation of this"
            << " file type!\n";
-    if (Out != &fouts()) delete Out;
+    delete Out;
     // And the Out file is empty and useless, so remove it now.
     sys::Path(OutputFilename).eraseFromDisk();
     return 1;
@@ -340,8 +342,8 @@
 
   PM.run(mod);
 
-  // Delete the ostream if it's not a stdout stream
-  if (Out != &fouts()) delete Out;
+  // Delete the ostream.
+  delete Out;
 
   return 0;
 }
diff --git a/tools/llvm-mc/llvm-mc.cpp b/tools/llvm-mc/llvm-mc.cpp
index a114ab0..6de6bfb 100644
--- a/tools/llvm-mc/llvm-mc.cpp
+++ b/tools/llvm-mc/llvm-mc.cpp
@@ -323,8 +323,7 @@
   Parser.setTargetParser(*TAP.get());
 
   int Res = Parser.Run(NoInitialTextSection);
-  if (Out != &fouts())
-    delete Out;
+  delete Out;
 
   // Delete output on errors.
   if (Res && OutputFilename != "-")
diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp
index 51b920f..a29555c 100644
--- a/tools/opt/opt.cpp
+++ b/tools/opt/opt.cpp
@@ -378,8 +378,12 @@
 
   // Figure out what stream we are supposed to write to...
   // FIXME: outs() is not binary!
-  raw_ostream *Out = &outs();  // Default to printing to stdout...
-  if (OutputFilename != "-") {
+  raw_ostream *Out = 0;
+  bool DeleteStream = true;
+  if (OutputFilename == "-") {
+    Out = &outs();  // Default to printing to stdout...
+    DeleteStream = false;
+  } else {
     if (NoOutput || AnalyzeOnly) {
       errs() << "WARNING: The -o (output filename) option is ignored when\n"
                 "the --disable-output or --analyze options are used.\n";
@@ -540,7 +544,7 @@
   Passes.run(*M.get());
 
   // Delete the raw_fd_ostream.
-  if (Out != &outs())
+  if (DeleteStream)
     delete Out;
   return 0;
 }