[llvm-branch-commits] [llvm] [Offloading] Add support for compressed OffloadBinary types (PR #222774)

Joseph Huber via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Sep 10 20:08:15 PDT 2026


================
@@ -50,6 +55,25 @@ Expected<OffloadYAML::Binary *> dump(MemoryBufferRef Source,
   while (Offset < Source.getBufferSize()) {
     MemoryBufferRef Buffer = MemoryBufferRef(
         Source.getBuffer().drop_front(Offset), Source.getBufferIdentifier());
+    std::unique_ptr<MemoryBuffer> Aligned;
+    if (!isAddrAligned(Align(object::OffloadBinary::getAlignment()),
+                       Buffer.getBufferStart())) {
+      Aligned = MemoryBuffer::getMemBufferCopy(Buffer.getBuffer(),
+                                               Buffer.getBufferIdentifier());
+      Buffer = *Aligned;
+    }
+    auto HeaderOrErr = object::OffloadBinary::extractHeader(Buffer);
+    if (!HeaderOrErr)
+      return HeaderOrErr.takeError();
+    const object::OffloadBinary::Header *TheHeader = *HeaderOrErr;
+    uint64_t Size = TheHeader->Size;
+    if (TheHeader->Version >= 3 && TheHeader->InflatedSize != 0) {
+      StringRef Payload = Buffer.getBuffer().take_front(Size).drop_front(
+          TheHeader->EntriesOffset);
+      YAMLBinary->Compression = identify_magic(Payload) == file_magic::zstd
+                                    ? compression::Format::Zstd
+                                    : compression::Format::Zlib;
----------------
jhuber6 wrote:

It's just a ternary, I think it's easier to just keep it separate than expand the public API.

https://github.com/llvm/llvm-project/pull/222774


More information about the llvm-branch-commits mailing list