]> git.lizzy.rs Git - rust.git/commitdiff
Buffer LLVM's object output stream
authorAlex Crichton <alex@alexcrichton.com>
Mon, 20 Aug 2018 06:44:25 +0000 (23:44 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Mon, 20 Aug 2018 06:46:32 +0000 (23:46 -0700)
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.

src/rustllvm/PassWrapper.cpp

index d9fbd494ab3484ed3f4ae519eb08380291479895..46825efeee276f290eacc97349969f1fbe9a5018 100644 (file)
@@ -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