about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2018-08-22 13:16:32 +0000
committerbors <bors@rust-lang.org>2018-08-22 13:16:32 +0000
commit329dde57fddee4d5fa0ae374cb5c8474459dfb0c (patch)
treed64c5366431e6ad818164e642f269dcb89b22fc0 /src
parent674ef668f13c52a1fadbf01b24d8da1e12d15e70 (diff)
parent9d54bf8df2677dd5f985838c5686efaa24a73b6c (diff)
downloadrust-329dde57fddee4d5fa0ae374cb5c8474459dfb0c.tar.gz
rust-329dde57fddee4d5fa0ae374cb5c8474459dfb0c.zip
Auto merge of #53524 - alexcrichton:buffer-out, r=eddyb
Buffer LLVM's object output stream

In some profiling on OSX I saw the `write` syscall as quite high up on
the profiling graph, which is definitely not good! It looks like we're
setting the output stream of an object file as directly to a file
descriptor which means that we run the risk of doing lots of little
writes rather than a few large writes.

This commit fixes this issue by adding a buffered stream on the output,
causing the `write` syscall to disappear from the profiles on OSX.
Diffstat (limited to 'src')
-rw-r--r--src/rustllvm/PassWrapper.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/rustllvm/PassWrapper.cpp b/src/rustllvm/PassWrapper.cpp
index d9fbd494ab3..46825efeee2 100644
--- a/src/rustllvm/PassWrapper.cpp
+++ b/src/rustllvm/PassWrapper.cpp
@@ -556,7 +556,8 @@ LLVMRustWriteOutputFile(LLVMTargetMachineRef Target, LLVMPassManagerRef PMR,
   }
 
 #if LLVM_VERSION_GE(7, 0)
-  unwrap(Target)->addPassesToEmitFile(*PM, OS, nullptr, FileType, false);
+  buffer_ostream BOS(OS);
+  unwrap(Target)->addPassesToEmitFile(*PM, BOS, nullptr, FileType, false);
 #else
   unwrap(Target)->addPassesToEmitFile(*PM, OS, FileType, false);
 #endif