https://github.com/jhuber6 updated 
https://github.com/llvm/llvm-project/pull/227765

>From 2f95eda1015fef145c4e0719865b997bc97ad7cf Mon Sep 17 00:00:00 2001
From: Joseph Huber <[email protected]>
Date: Wed, 30 Sep 2026 10:57:03 -0500
Subject: [PATCH 1/3] [Clang] Support `--offload-compress` for offload binaries

Summary:
https://github.com/llvm/llvm-project/pull/222774 added support for
compressing binaries. This PR does the minimal work required to hook
this up to the existing handling. The end goal is to be able to replace
the bundler in HIP.

The one change is moving the `--verbose` handling from the shared helper
so this can be unified.
---
 clang/lib/Driver/ToolChains/Clang.cpp         |  4 ++++
 clang/lib/Driver/ToolChains/CommonArgs.cpp    |  2 --
 clang/lib/Driver/ToolChains/HIPUtility.cpp    |  2 ++
 .../test/Driver/hip-offload-compress-zstd.hip | 21 +++++++++++++++-
 .../linker-wrapper-compressed.c               | 24 +++++++++++++++++++
 llvm/docs/CommandGuide/llvm-offload-binary.md |  3 ++-
 .../llvm-offload-binary.cpp                   |  9 ++++---
 7 files changed, 58 insertions(+), 7 deletions(-)
 create mode 100644 
clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-compressed.c

diff --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index 4c8530f01fd9a8..896b9ee449ba70 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -9647,6 +9647,8 @@ void OffloadBundler::ConstructJob(Compilation &C, const 
JobAction &JA,
     CmdArgs.push_back(TCArgs.MakeArgString(UB));
   }
   addOffloadCompressArgs(TCArgs, CmdArgs);
+  if (TCArgs.hasArg(options::OPT_v))
+    CmdArgs.push_back("--verbose");
   // All the inputs are encoded as commands.
   C.addCommand(std::make_unique<Command>(
       JA, *this, ResponseFileSupport::None(),
@@ -9704,6 +9706,8 @@ void OffloadPackager::ConstructJob(Compilation &C, const 
JobAction &JA,
     CmdArgs.push_back(Args.MakeArgString("--image=" + llvm::join(Parts, ",")));
   }
 
+  addOffloadCompressArgs(Args, CmdArgs);
+
   C.addCommand(std::make_unique<Command>(
       JA, *this, ResponseFileSupport::AtFileUTF8(),
       Args.MakeArgString(getToolChain().GetProgramPath(getShortName())),
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 7c832ef405fa51..64d4f9f8b9155d 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -3038,8 +3038,6 @@ void tools::addOffloadCompressArgs(const 
llvm::opt::ArgList &TCArgs,
   if (TCArgs.hasFlag(options::OPT_offload_compress,
                      options::OPT_no_offload_compress, false))
     CmdArgs.push_back("--compress");
-  if (TCArgs.hasArg(options::OPT_v))
-    CmdArgs.push_back("--verbose");
   if (auto *Arg = TCArgs.getLastArg(options::OPT_offload_compression_level_EQ))
     CmdArgs.push_back(
         TCArgs.MakeArgString(Twine("--compression-level=") + Arg->getValue()));
diff --git a/clang/lib/Driver/ToolChains/HIPUtility.cpp 
b/clang/lib/Driver/ToolChains/HIPUtility.cpp
index 9c4a67b2f182c6..e19cfa0349bfe6 100644
--- a/clang/lib/Driver/ToolChains/HIPUtility.cpp
+++ b/clang/lib/Driver/ToolChains/HIPUtility.cpp
@@ -82,6 +82,8 @@ void HIP::constructHIPFatbinCommand(Compilation &C, const 
JobAction &JA,
   BundlerArgs.push_back(BundlerOutputArg);
 
   addOffloadCompressArgs(Args, BundlerArgs);
+  if (Args.hasArg(options::OPT_v))
+    BundlerArgs.push_back("--verbose");
 
   const char *Bundler = Args.MakeArgString(
       T.getToolChain().GetProgramPath("clang-offload-bundler"));
diff --git a/clang/test/Driver/hip-offload-compress-zstd.hip 
b/clang/test/Driver/hip-offload-compress-zstd.hip
index a231197af44f83..fbf03cf8e1cdc4 100644
--- a/clang/test/Driver/hip-offload-compress-zstd.hip
+++ b/clang/test/Driver/hip-offload-compress-zstd.hip
@@ -12,4 +12,23 @@
 // RUN:   -o %t.bc \
 // RUN: 2>&1 | FileCheck %s --check-prefix=NEWDRIVER
 
-// NEWDRIVER: clang-linker-wrapper{{.*}}"--compress" "--verbose" 
"--compression-level=9"
+// NEWDRIVER: 
llvm-offload-binary{{.*}}"--image={{[^"]*}}arch=gfx1101{{[^"]*}}" "--compress" 
"--compression-level=9"{{$}}
+// NEWDRIVER: clang-linker-wrapper{{.*}}"--compress" "--compression-level=9"
+// NEWDRIVER-NOT: "--verbose"
+
+// RUN: %clang -### --target=x86_64-linux-gnu \
+// RUN:   -x hip --offload-arch=gfx1100 --offload-arch=gfx1101 \
+// RUN:   -nogpuinc -nogpulib -c %S/Inputs/hip_multiple_inputs/a.cu \
+// RUN:   --offload-compress \
+// RUN: 2>&1 | FileCheck %s --check-prefix=NORDC
+
+// NORDC: llvm-offload-binary{{.*}}"--image={{[^"]*}}arch=gfx1101{{[^"]*}}" 
"--compress"{{$}}
+// NORDC: clang-linker-wrapper{{.*}}"--emit-fatbin-only"{{.*}}"--compress"
+
+// RUN: %clang -### --target=x86_64-linux-gnu \
+// RUN:   -x hip --offload-arch=gfx1100 \
+// RUN:   -fgpu-rdc -nogpuinc -nogpulib -c %S/Inputs/hip_multiple_inputs/a.cu \
+// RUN:   --offload-compress --no-offload-compress \
+// RUN: 2>&1 | FileCheck %s --check-prefix=NOCOMPRESS
+
+// NOCOMPRESS: 
llvm-offload-binary{{.*}}"--image={{[^"]*}}arch=gfx1100{{[^"]*}}"{{$}}
diff --git 
a/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-compressed.c 
b/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-compressed.c
new file mode 100644
index 00000000000000..088955ff76207d
--- /dev/null
+++ b/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-compressed.c
@@ -0,0 +1,24 @@
+// REQUIRES: x86-registered-target
+
+// RUN: %clang -cc1 %s -triple x86_64-unknown-linux-gnu -emit-obj -o %t.elf.o
+
+// RUN: llvm-offload-binary -o %t.out --compress \
+// RUN:   
--image=file=%t.elf.o,kind=hip,triple=amdgpu9.0a-amd-amdhsa,arch=gfx90a \
+// RUN:   
--image=file=%t.elf.o,kind=hip,triple=amdgpu9.08-amd-amdhsa,arch=gfx908
+// RUN: %clang -cc1 %s -triple x86_64-unknown-linux-gnu -emit-obj -o %t.o \
+// RUN:   -fembed-offload-object=%t.out
+// RUN: clang-linker-wrapper --dry-run --host-triple=x86_64-unknown-linux-gnu \
+// RUN:   --linker-path=/usr/bin/ld %t.o -o a.out 2>&1 \
+// RUN:   | FileCheck %s --check-prefixes=CHECK,HIP
+
+// RUN: llvm-offload-binary -o %t-lib.out --compress \
+// RUN:   
--image=file=%t.elf.o,kind=openmp,triple=amdgpu9.0a-amd-amdhsa,arch=gfx90a
+// RUN: %clang -cc1 %s -triple x86_64-unknown-linux-gnu -emit-obj -o %t-lib.o \
+// RUN:   -fembed-offload-object=%t-lib.out
+// RUN: rm -f %t.a && llvm-ar rcs %t.a %t-lib.o
+// RUN: clang-linker-wrapper --dry-run --host-triple=x86_64-unknown-linux-gnu \
+// RUN:   --linker-path=/usr/bin/ld --whole-archive %t.a --no-whole-archive \
+// RUN:   -o a.out 2>&1 | FileCheck %s
+
+// CHECK: clang{{.*}} --target=amdgpu9.0a-amd-amdhsa -mcpu=gfx90a
+// HIP:   clang{{.*}} --target=amdgpu9.08-amd-amdhsa -mcpu=gfx908
diff --git a/llvm/docs/CommandGuide/llvm-offload-binary.md 
b/llvm/docs/CommandGuide/llvm-offload-binary.md
index 6af4bbe7d4ffa3..9c53b12de99b42 100644
--- a/llvm/docs/CommandGuide/llvm-offload-binary.md
+++ b/llvm/docs/CommandGuide/llvm-offload-binary.md
@@ -69,7 +69,8 @@ Compress the packaged offload binary.
 :::
 
 :::{option} --compression-format=<zstd|zlib>
-Select the compression format. The default is `zstd`.
+Select the compression format. The default is `zstd`, or `zlib` if LLVM was
+built without zstd support.
 :::
 
 :::{option} --compression-level=<level>
diff --git a/llvm/tools/llvm-offload-binary/llvm-offload-binary.cpp 
b/llvm/tools/llvm-offload-binary/llvm-offload-binary.cpp
index 35946b2b509c7d..b171080705cea1 100644
--- a/llvm/tools/llvm-offload-binary/llvm-offload-binary.cpp
+++ b/llvm/tools/llvm-offload-binary/llvm-offload-binary.cpp
@@ -143,10 +143,13 @@ static Error bundleImages() {
 
   SmallString<0> Buffer;
   if (Compress) {
-    if (const char *Reason =
-            compression::getReasonIfUnsupported(CompressionFormat))
+    compression::Format Format = CompressionFormat;
+    if (!CompressionFormat.getNumOccurrences() &&
+        !compression::zstd::isAvailable())
+      Format = compression::Format::Zlib;
+    if (const char *Reason = compression::getReasonIfUnsupported(Format))
       return createStringError(inconvertibleErrorCode(), Reason);
-    compression::Params Params(CompressionFormat);
+    compression::Params Params(Format);
     if (CompressionLevel.getNumOccurrences())
       Params.level = CompressionLevel;
     Expected<SmallString<0>> CompressedOrErr =

>From 3fce8d36d0b936fef59d26572fd6dcab9aeb44d1 Mon Sep 17 00:00:00 2001
From: Joseph Huber <[email protected]>
Date: Thu, 1 Oct 2026 08:56:26 -0500
Subject: [PATCH 2/3] test update

---
 .../clang-linker-wrapper/linker-wrapper-compressed.c             | 1 +
 1 file changed, 1 insertion(+)

diff --git 
a/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-compressed.c 
b/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-compressed.c
index 088955ff76207d..65b09ec2fbbbbe 100644
--- a/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-compressed.c
+++ b/clang/test/OffloadTools/clang-linker-wrapper/linker-wrapper-compressed.c
@@ -1,4 +1,5 @@
 // REQUIRES: x86-registered-target
+// REQUIRES: zlib || zstd
 
 // RUN: %clang -cc1 %s -triple x86_64-unknown-linux-gnu -emit-obj -o %t.elf.o
 

>From e22ae21bb4eba2d9712af2d61a563b31a3a85969 Mon Sep 17 00:00:00 2001
From: Joseph Huber <[email protected]>
Date: Fri, 9 Oct 2026 17:00:36 -0500
Subject: [PATCH 3/3] comments and rebase

---
 clang/include/clang/Driver/CommonArgs.h       |  3 +-
 clang/lib/Driver/ToolChains/Clang.cpp         |  5 ++-
 clang/lib/Driver/ToolChains/CommonArgs.cpp    | 15 +++++++-
 .../test/Driver/hip-offload-compress-zstd.hip | 13 ++++++-
 llvm/docs/CommandGuide/llvm-offload-binary.md |  2 +-
 .../compress-level-zlib.test                  |  8 ++++
 .../tools/llvm-offload-binary/compress.test   |  9 +++++
 .../llvm-offload-binary.cpp                   | 37 ++++++++++++++++++-
 8 files changed, 83 insertions(+), 9 deletions(-)
 create mode 100644 llvm/test/tools/llvm-offload-binary/compress-level-zlib.test

diff --git a/clang/include/clang/Driver/CommonArgs.h 
b/clang/include/clang/Driver/CommonArgs.h
index 6ba7657e283b8d..a87c7da30d73f9 100644
--- a/clang/include/clang/Driver/CommonArgs.h
+++ b/clang/include/clang/Driver/CommonArgs.h
@@ -267,7 +267,8 @@ void addOutlineAtomicsArgs(const Driver &D, const ToolChain 
&TC,
                            llvm::opt::ArgStringList &CmdArgs,
                            const llvm::Triple &Triple);
 void addOffloadCompressArgs(const llvm::opt::ArgList &TCArgs,
-                            llvm::opt::ArgStringList &CmdArgs);
+                            llvm::opt::ArgStringList &CmdArgs,
+                            bool EmitCompressionFormat = false);
 void addMCModel(const Driver &D, const llvm::opt::ArgList &Args,
                 const llvm::Triple &Triple,
                 const llvm::Reloc::Model &RelocationModel,
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index 896b9ee449ba70..79661cb704028e 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -9706,7 +9706,10 @@ void OffloadPackager::ConstructJob(Compilation &C, const 
JobAction &JA,
     CmdArgs.push_back(Args.MakeArgString("--image=" + llvm::join(Parts, ",")));
   }
 
-  addOffloadCompressArgs(Args, CmdArgs);
+  // FIXME: --offload-compress is HIP only until the OpenMP runtime accepts it.
+  if (JA.isDeviceOffloading(Action::OFK_HIP) &&
+      Args.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc, false))
+    addOffloadCompressArgs(Args, CmdArgs, /*EmitCompressionFormat=*/true);
 
   C.addCommand(std::make_unique<Command>(
       JA, *this, ResponseFileSupport::AtFileUTF8(),
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp 
b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 64d4f9f8b9155d..bef673e049deb4 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -3034,13 +3034,24 @@ void tools::addOutlineAtomicsArgs(const Driver &D, 
const ToolChain &TC,
 }
 
 void tools::addOffloadCompressArgs(const llvm::opt::ArgList &TCArgs,
-                                   llvm::opt::ArgStringList &CmdArgs) {
+                                   llvm::opt::ArgStringList &CmdArgs,
+                                   bool EmitCompressionFormat) {
   if (TCArgs.hasFlag(options::OPT_offload_compress,
                      options::OPT_no_offload_compress, false))
     CmdArgs.push_back("--compress");
-  if (auto *Arg = TCArgs.getLastArg(options::OPT_offload_compression_level_EQ))
+  if (auto *Arg =
+          TCArgs.getLastArg(options::OPT_offload_compression_level_EQ)) {
+    // llvm-offload-binary rejects a level unless the format is named. Pick the
+    // same default the tool would: zstd, or zlib when zstd is not built.
+    if (EmitCompressionFormat) {
+      const char *Format =
+          llvm::compression::zstd::isAvailable() ? "zstd" : "zlib";
+      CmdArgs.push_back(
+          TCArgs.MakeArgString(Twine("--compression-format=") + Format));
+    }
     CmdArgs.push_back(
         TCArgs.MakeArgString(Twine("--compression-level=") + Arg->getValue()));
+  }
 }
 
 void tools::addMCModel(const Driver &D, const llvm::opt::ArgList &Args,
diff --git a/clang/test/Driver/hip-offload-compress-zstd.hip 
b/clang/test/Driver/hip-offload-compress-zstd.hip
index fbf03cf8e1cdc4..c8899a1b97e720 100644
--- a/clang/test/Driver/hip-offload-compress-zstd.hip
+++ b/clang/test/Driver/hip-offload-compress-zstd.hip
@@ -12,7 +12,7 @@
 // RUN:   -o %t.bc \
 // RUN: 2>&1 | FileCheck %s --check-prefix=NEWDRIVER
 
-// NEWDRIVER: 
llvm-offload-binary{{.*}}"--image={{[^"]*}}arch=gfx1101{{[^"]*}}" "--compress" 
"--compression-level=9"{{$}}
+// NEWDRIVER: 
llvm-offload-binary{{.*}}"--image={{[^"]*}}arch=gfx1101{{[^"]*}}" "--compress" 
"--compression-format=zstd" "--compression-level=9"{{$}}
 // NEWDRIVER: clang-linker-wrapper{{.*}}"--compress" "--compression-level=9"
 // NEWDRIVER-NOT: "--verbose"
 
@@ -22,7 +22,8 @@
 // RUN:   --offload-compress \
 // RUN: 2>&1 | FileCheck %s --check-prefix=NORDC
 
-// NORDC: llvm-offload-binary{{.*}}"--image={{[^"]*}}arch=gfx1101{{[^"]*}}" 
"--compress"{{$}}
+// NORDC: 
llvm-offload-binary{{.*}}"--image={{[^"]*}}arch=gfx1101{{[^"]*}}"{{$}}
+// NORDC-NOT: "--compress"
 // NORDC: clang-linker-wrapper{{.*}}"--emit-fatbin-only"{{.*}}"--compress"
 
 // RUN: %clang -### --target=x86_64-linux-gnu \
@@ -32,3 +33,11 @@
 // RUN: 2>&1 | FileCheck %s --check-prefix=NOCOMPRESS
 
 // NOCOMPRESS: 
llvm-offload-binary{{.*}}"--image={{[^"]*}}arch=gfx1100{{[^"]*}}"{{$}}
+
+// --offload-compress is HIP only, so other offload packagers ignore it.
+// RUN: %clang -### --target=x86_64-linux-gnu -x c -fopenmp \
+// RUN:   --offload-arch=gfx1100 -nogpulib --offload-compress -c %s \
+// RUN: 2>&1 | FileCheck %s --check-prefix=OMP
+
+// OMP: llvm-offload-binary{{.*}}kind=openmp
+// OMP-NOT: "--compress"
diff --git a/llvm/docs/CommandGuide/llvm-offload-binary.md 
b/llvm/docs/CommandGuide/llvm-offload-binary.md
index 9c53b12de99b42..7cca5be9736c38 100644
--- a/llvm/docs/CommandGuide/llvm-offload-binary.md
+++ b/llvm/docs/CommandGuide/llvm-offload-binary.md
@@ -74,7 +74,7 @@ built without zstd support.
 :::
 
 :::{option} --compression-level=<level>
-Specify a compression level for the selected format.
+Specify a compression level. This requires {option}`--compression-format`,
 :::
 
 :::{option} --image=<<key>=<value>,...>
diff --git a/llvm/test/tools/llvm-offload-binary/compress-level-zlib.test 
b/llvm/test/tools/llvm-offload-binary/compress-level-zlib.test
new file mode 100644
index 00000000000000..5d54a9fc0af6a2
--- /dev/null
+++ b/llvm/test/tools/llvm-offload-binary/compress-level-zlib.test
@@ -0,0 +1,8 @@
+# REQUIRES: zlib
+
+# RUN: llvm-offload-binary -o %t --compress --compression-format=zlib 
--compression-level=9 --image=file=%s,arch=abc,triple=x-y-z
+# RUN: llvm-offload-binary %t --image=file=%t.out,arch=abc,triple=x-y-z
+# RUN: diff %s %t.out
+# RUN: not llvm-offload-binary -o %t.bad --compress --compression-format=zlib 
--compression-level=12 --image=file=%s,arch=abc,triple=x-y-z 2>&1 | FileCheck %s
+
+# CHECK: invalid zlib compression level 12; expected a value in [0, 9]
diff --git a/llvm/test/tools/llvm-offload-binary/compress.test 
b/llvm/test/tools/llvm-offload-binary/compress.test
index 55232560ead2c5..d452699bfadcf6 100644
--- a/llvm/test/tools/llvm-offload-binary/compress.test
+++ b/llvm/test/tools/llvm-offload-binary/compress.test
@@ -9,6 +9,15 @@
 # RUN: llvm-offload-binary %t.neg --image=file=%t.neg.out,arch=abc,triple=x-y-z
 # RUN: diff %s %t.neg.out
 
+# RUN: not llvm-offload-binary -o %t.nfmt --compress --compression-level=12 
--image=file=%s,arch=abc,triple=x-y-z 2>&1 | FileCheck %s 
--check-prefix=NEED-FORMAT
+# RUN: llvm-offload-binary -o %t.l12 --compress --compression-format=zstd 
--compression-level=12 --image=file=%s,arch=abc,triple=x-y-z
+# RUN: llvm-offload-binary %t.l12 --image=file=%t.l12.out,arch=abc,triple=x-y-z
+# RUN: diff %s %t.l12.out
+# RUN: not llvm-offload-binary -o %t.bad --compress --compression-format=zstd 
--compression-level=100 --image=file=%s,arch=abc,triple=x-y-z 2>&1 | FileCheck 
%s --check-prefix=BAD-LEVEL
+
+# NEED-FORMAT: --compression-level requires --compression-format
+# BAD-LEVEL: invalid zstd compression level 100; expected a value in [-5, 22]
+
 # RUN: llvm-offload-binary -o %t.u --image=file=%s,arch=abc,triple=x-y-z
 # RUN: cat %t %t.u > %t.concat
 # RUN: llvm-objdump --offloading %t.concat | FileCheck %s 
--check-prefixes=CHECK,CONCAT
diff --git a/llvm/tools/llvm-offload-binary/llvm-offload-binary.cpp 
b/llvm/tools/llvm-offload-binary/llvm-offload-binary.cpp
index b171080705cea1..8763ac389adcaa 100644
--- a/llvm/tools/llvm-offload-binary/llvm-offload-binary.cpp
+++ b/llvm/tools/llvm-offload-binary/llvm-offload-binary.cpp
@@ -68,7 +68,8 @@ static cl::opt<compression::Format> CompressionFormat(
 
 static cl::opt<int>
     CompressionLevel("compression-level",
-                     cl::desc("Compression level used with --compress"),
+                     cl::desc("Compression level used with --compress. "
+                              "Requires --compression-format"),
                      cl::init(-1), cl::cat(OffloadBinaryCategory));
 
 /// Path of the current binary.
@@ -89,6 +90,31 @@ static DenseMap<StringRef, StringRef> 
getImageArguments(StringRef Image,
   return Args;
 }
 
+// ZSTD_maxCLevel(). zstd::BestSizeCompression is the usual high end; the
+// library still accepts levels through this maximum.
+static constexpr int ZstdMaxCompressionLevel = 22;
+
+static Error checkCompressionLevel(compression::Format Format, int Level) {
+  int Lo, Hi;
+  const char *Name;
+  if (Format == compression::Format::Zlib) {
+    Lo = compression::zlib::NoCompression;
+    Hi = compression::zlib::BestSizeCompression;
+    Name = "zlib";
+  } else {
+    Lo = compression::zstd::NoCompression;
+    Hi = ZstdMaxCompressionLevel;
+    Name = "zstd";
+  }
+  if (Level < Lo || Level > Hi)
+    return createStringError(
+        inconvertibleErrorCode(),
+        "invalid %s compression level %d; expected a value "
+        "in [%d, %d]",
+        Name, Level, Lo, Hi);
+  return Error::success();
+}
+
 static Error writeFile(StringRef Filename, StringRef Data) {
   Expected<std::unique_ptr<FileOutputBuffer>> OutputOrErr =
       FileOutputBuffer::create(Filename, Data.size());
@@ -150,8 +176,15 @@ static Error bundleImages() {
     if (const char *Reason = compression::getReasonIfUnsupported(Format))
       return createStringError(inconvertibleErrorCode(), Reason);
     compression::Params Params(Format);
-    if (CompressionLevel.getNumOccurrences())
+    if (CompressionLevel.getNumOccurrences()) {
+      if (!CompressionFormat.getNumOccurrences())
+        return createStringError(
+            inconvertibleErrorCode(),
+            "--compression-level requires --compression-format");
+      if (Error E = checkCompressionLevel(Format, CompressionLevel))
+        return E;
       Params.level = CompressionLevel;
+    }
     Expected<SmallString<0>> CompressedOrErr =
         OffloadBinary::write(AllImages, Params);
     if (!CompressedOrErr)

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to