[byteTree] Write fixed sized data using an optimized form

If we know the size of a type at compile time (like we do for all the
integer types), it is cheaper to assign the data buffer directly instead
of using a memcpy.
This commit is contained in:
Alex Hoppen
2018-08-24 11:10:00 -07:00
parent f97d13d984
commit 33d86d5cb6
5 changed files with 123 additions and 38 deletions

View File

@@ -729,14 +729,15 @@ int doSerializeRawTree(const char *MainExecutablePath,
return EXIT_FAILURE;
}
llvm::AppendingBinaryByteStream Stream(llvm::support::endianness::little);
llvm::BinaryStreamWriter Writer(Stream);
swift::ExponentialGrowthAppendingBinaryByteStream Stream(
llvm::support::endianness::little);
Stream.reserve(32 * 1024);
std::map<void *, void *> UserInfo;
UserInfo[swift::byteTree::UserInfoKeyReusedNodeIds] = &ReusedNodeIds;
if (options::AddByteTreeFields) {
UserInfo[swift::byteTree::UserInfoKeyAddInvalidFields] = (void *)true;
}
swift::byteTree::ByteTreeWriter::write(/*ProtocolVersion=*/1, Writer,
swift::byteTree::ByteTreeWriter::write(Stream, /*ProtocolVersion=*/1,
*Root, UserInfo);
auto OutputBufferOrError = llvm::FileOutputBuffer::create(
options::OutputFilename, Stream.data().size());