Avoid calling outs() and fouts() when the stream isn't really needed.
authorDan Gohman <gohman@apple.com>
Thu, 27 May 2010 19:47:36 +0000 (19:47 +0000)
committerDan Gohman <gohman@apple.com>
Thu, 27 May 2010 19:47:36 +0000 (19:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104873 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llc/llc.cpp
tools/llvm-mc/llvm-mc.cpp
tools/opt/opt.cpp

index f3eed56accdc977a998800e5a57d7bb5b0a97243..199a1a9204393d899be7d7b1d0ef76d7d295c55a 100644 (file)
@@ -124,7 +124,8 @@ static formatted_raw_ostream *GetOutputStream(const char *TargetName,
                                               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 @@ static formatted_raw_ostream *GetOutputStream(const char *TargetName,
 
   if (InputFilename == "-") {
     OutputFilename = "-";
-    return &fouts();
+    return new formatted_raw_ostream(outs(),
+                                     formatted_raw_ostream::PRESERVE_STREAM);
   }
 
   OutputFilename = GetFileNameRoot(InputFilename);
@@ -332,7 +334,7 @@ int main(int argc, char **argv) {
                                  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 @@ int main(int argc, char **argv) {
 
   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;
 }
index a114ab0c3f3ac17b6210911848767801d9fbb3c5..6de6bfb3c8a670cdd99799013b191288526d4dcd 100644 (file)
@@ -323,8 +323,7 @@ static int AssembleInput(const char *ProgName) {
   Parser.setTargetParser(*TAP.get());
 
   int Res = Parser.Run(NoInitialTextSection);
-  if (Out != &fouts())
-    delete Out;
+  delete Out;
 
   // Delete output on errors.
   if (Res && OutputFilename != "-")
index 51b920f533134158bc7788a8f6de252c4794073f..a29555ccf95070c3e04f4619721988a8634754e1 100644 (file)
@@ -378,8 +378,12 @@ int main(int argc, char **argv) {
 
   // 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 @@ int main(int argc, char **argv) {
   Passes.run(*M.get());
 
   // Delete the raw_fd_ostream.
-  if (Out != &outs())
+  if (DeleteStream)
     delete Out;
   return 0;
 }