Skip to content

Commit de45503

Browse files
committed
Refactor API change for user specified output stream
1 parent d3c9a79 commit de45503

File tree

2 files changed

+53
-47
lines changed

2 files changed

+53
-47
lines changed

llvm/include/llvm/Object/OffloadBundle.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,10 @@ class CompressedOffloadBundle {
6363

6464
static llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>>
6565
compress(llvm::compression::Params P, const llvm::MemoryBuffer &Input,
66-
uint16_t Version, bool Verbose = false, raw_ostream &OutS = errs());
66+
uint16_t Version, raw_ostream *VerboseStream = nullptr);
6767
static llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>>
68-
decompress(const llvm::MemoryBuffer &Input, bool Verbose = false, raw_ostream &OS = errs());
68+
decompress(const llvm::MemoryBuffer &Input,
69+
raw_ostream *VerboseStream = nullptr);
6970
};
7071

7172
/// Bundle entry in binary clang-offload-bundler format.

llvm/lib/Object/OffloadBundle.cpp

Lines changed: 50 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ Error extractOffloadBundle(MemoryBufferRef Contents, uint64_t SectionOffset,
6262
return createFileError(FileName, EC);
6363

6464
Expected<std::unique_ptr<MemoryBuffer>> DecompressedBufferOrErr =
65-
CompressedOffloadBundle::decompress(**CodeOrErr, false, errs());
65+
CompressedOffloadBundle::decompress(**CodeOrErr, &nulls());
6666
if (!DecompressedBufferOrErr)
6767
return createStringError(
6868
inconvertibleErrorCode(),
@@ -297,19 +297,19 @@ static std::string formatWithCommas(unsigned long long Value) {
297297
Expected<std::unique_ptr<MemoryBuffer>>
298298
CompressedOffloadBundle::compress(compression::Params P,
299299
const MemoryBuffer &Input, uint16_t Version,
300-
bool Verbose, raw_ostream &OutS) {
300+
raw_ostream *VerboseStream) {
301301
if (!compression::zstd::isAvailable() && !compression::zlib::isAvailable())
302302
return createStringError("compression not supported.");
303303
Timer HashTimer("Hash Calculation Timer", "Hash calculation time",
304304
OffloadBundlerTimerGroup);
305-
if (Verbose)
305+
if (VerboseStream)
306306
HashTimer.startTimer();
307307
MD5 Hash;
308308
MD5::MD5Result Result;
309309
Hash.update(Input.getBuffer());
310310
Hash.final(Result);
311311
uint64_t TruncatedHash = Result.low();
312-
if (Verbose)
312+
if (VerboseStream)
313313
HashTimer.stopTimer();
314314

315315
SmallVector<uint8_t, 0> CompressedBuffer;
@@ -318,10 +318,10 @@ CompressedOffloadBundle::compress(compression::Params P,
318318
Input.getBuffer().size());
319319
Timer CompressTimer("Compression Timer", "Compression time",
320320
OffloadBundlerTimerGroup);
321-
if (Verbose)
321+
if (VerboseStream)
322322
CompressTimer.startTimer();
323323
compression::compress(P, BufferUint8, CompressedBuffer);
324-
if (Verbose)
324+
if (VerboseStream)
325325
CompressTimer.stopTimer();
326326

327327
uint16_t CompressionMethod = static_cast<uint16_t>(P.format);
@@ -378,28 +378,30 @@ CompressedOffloadBundle::compress(compression::Params P,
378378
OS.write(reinterpret_cast<const char *>(CompressedBuffer.data()),
379379
CompressedBuffer.size());
380380

381-
if (Verbose) {
381+
if (VerboseStream) {
382382
auto MethodUsed = P.format == compression::Format::Zstd ? "zstd" : "zlib";
383383
double CompressionRate =
384384
static_cast<double>(UncompressedSize64) / CompressedBuffer.size();
385385
double CompressionTimeSeconds = CompressTimer.getTotalTime().getWallTime();
386386
double CompressionSpeedMBs =
387387
(UncompressedSize64 / (1024.0 * 1024.0)) / CompressionTimeSeconds;
388-
OutS << "Compressed bundle format version: " << Version << "\n"
389-
<< "Total file size (including headers): "
390-
<< formatWithCommas(TotalFileSize64) << " bytes\n"
391-
<< "Compression method used: " << MethodUsed << "\n"
392-
<< "Compression level: " << P.level << "\n"
393-
<< "Binary size before compression: "
394-
<< formatWithCommas(UncompressedSize64) << " bytes\n"
395-
<< "Binary size after compression: "
396-
<< formatWithCommas(CompressedBuffer.size()) << " bytes\n"
397-
<< "Compression rate: " << format("%.2lf", CompressionRate) << "\n"
398-
<< "Compression ratio: "
399-
<< format("%.2lf%%", 100.0 / CompressionRate) << "\n"
400-
<< "Compression speed: " << format("%.2lf MB/s", CompressionSpeedMBs)
401-
<< "\n"
402-
<< "Truncated MD5 hash: " << format_hex(TruncatedHash, 16) << "\n";
388+
*VerboseStream << "Compressed bundle format version: " << Version << "\n"
389+
<< "Total file size (including headers): "
390+
<< formatWithCommas(TotalFileSize64) << " bytes\n"
391+
<< "Compression method used: " << MethodUsed << "\n"
392+
<< "Compression level: " << P.level << "\n"
393+
<< "Binary size before compression: "
394+
<< formatWithCommas(UncompressedSize64) << " bytes\n"
395+
<< "Binary size after compression: "
396+
<< formatWithCommas(CompressedBuffer.size()) << " bytes\n"
397+
<< "Compression rate: " << format("%.2lf", CompressionRate)
398+
<< "\n"
399+
<< "Compression ratio: "
400+
<< format("%.2lf%%", 100.0 / CompressionRate) << "\n"
401+
<< "Compression speed: "
402+
<< format("%.2lf MB/s", CompressionSpeedMBs) << "\n"
403+
<< "Truncated MD5 hash: " << format_hex(TruncatedHash, 16)
404+
<< "\n";
403405
}
404406

405407
return MemoryBuffer::getMemBufferCopy(
@@ -510,16 +512,17 @@ CompressedOffloadBundle::CompressedBundleHeader::tryParse(StringRef Blob) {
510512
}
511513

512514
Expected<std::unique_ptr<MemoryBuffer>>
513-
CompressedOffloadBundle::decompress(const MemoryBuffer &Input, bool Verbose, raw_ostream &OS) {
515+
CompressedOffloadBundle::decompress(const MemoryBuffer &Input,
516+
raw_ostream *VerboseStream) {
514517
StringRef Blob = Input.getBuffer();
515518

516519
// Check minimum header size (using V1 as it's the smallest).
517520
if (Blob.size() < sizeof(RawCompressedBundleHeader::CommonFields))
518521
return MemoryBuffer::getMemBufferCopy(Blob);
519522

520523
if (identify_magic(Blob) != file_magic::offload_bundle_compressed) {
521-
if (Verbose)
522-
OS << "Uncompressed bundle\n";
524+
if (VerboseStream)
525+
*VerboseStream << "Uncompressed bundle\n";
523526
return MemoryBuffer::getMemBufferCopy(Blob);
524527
}
525528

@@ -540,7 +543,7 @@ CompressedOffloadBundle::decompress(const MemoryBuffer &Input, bool Verbose, raw
540543

541544
Timer DecompressTimer("Decompression Timer", "Decompression time",
542545
OffloadBundlerTimerGroup);
543-
if (Verbose)
546+
if (VerboseStream)
544547
DecompressTimer.startTimer();
545548

546549
SmallVector<uint8_t, 0> DecompressedData;
@@ -554,7 +557,7 @@ CompressedOffloadBundle::decompress(const MemoryBuffer &Input, bool Verbose, raw
554557
"could not decompress embedded file contents: " +
555558
toString(std::move(DecompressionError)));
556559

557-
if (Verbose) {
560+
if (VerboseStream) {
558561
DecompressTimer.stopTimer();
559562

560563
double DecompressionTimeSeconds =
@@ -577,25 +580,27 @@ CompressedOffloadBundle::decompress(const MemoryBuffer &Input, bool Verbose, raw
577580
double DecompressionSpeedMBs =
578581
(UncompressedSize / (1024.0 * 1024.0)) / DecompressionTimeSeconds;
579582

580-
OS << "Compressed bundle format version: " << ThisVersion << "\n";
583+
*VerboseStream << "Compressed bundle format version: " << ThisVersion
584+
<< "\n";
581585
if (ThisVersion >= 2)
582-
OS << "Total file size (from header): "
583-
<< formatWithCommas(TotalFileSize) << " bytes\n";
584-
OS << "Decompression method: "
585-
<< (CompressionFormat == compression::Format::Zlib ? "zlib" : "zstd")
586-
<< "\n"
587-
<< "Size before decompression: "
588-
<< formatWithCommas(CompressedData.size()) << " bytes\n"
589-
<< "Size after decompression: " << formatWithCommas(UncompressedSize)
590-
<< " bytes\n"
591-
<< "Compression rate: " << format("%.2lf", CompressionRate) << "\n"
592-
<< "Compression ratio: "
593-
<< format("%.2lf%%", 100.0 / CompressionRate) << "\n"
594-
<< "Decompression speed: "
595-
<< format("%.2lf MB/s", DecompressionSpeedMBs) << "\n"
596-
<< "Stored hash: " << format_hex(StoredHash, 16) << "\n"
597-
<< "Recalculated hash: " << format_hex(RecalculatedHash, 16) << "\n"
598-
<< "Hashes match: " << (HashMatch ? "Yes" : "No") << "\n";
586+
*VerboseStream << "Total file size (from header): "
587+
<< formatWithCommas(TotalFileSize) << " bytes\n";
588+
*VerboseStream
589+
<< "Decompression method: "
590+
<< (CompressionFormat == compression::Format::Zlib ? "zlib" : "zstd")
591+
<< "\n"
592+
<< "Size before decompression: "
593+
<< formatWithCommas(CompressedData.size()) << " bytes\n"
594+
<< "Size after decompression: " << formatWithCommas(UncompressedSize)
595+
<< " bytes\n"
596+
<< "Compression rate: " << format("%.2lf", CompressionRate) << "\n"
597+
<< "Compression ratio: " << format("%.2lf%%", 100.0 / CompressionRate)
598+
<< "\n"
599+
<< "Decompression speed: "
600+
<< format("%.2lf MB/s", DecompressionSpeedMBs) << "\n"
601+
<< "Stored hash: " << format_hex(StoredHash, 16) << "\n"
602+
<< "Recalculated hash: " << format_hex(RecalculatedHash, 16) << "\n"
603+
<< "Hashes match: " << (HashMatch ? "Yes" : "No") << "\n";
599604
}
600605

601606
return MemoryBuffer::getMemBufferCopy(toStringRef(DecompressedData));

0 commit comments

Comments
 (0)