Author: alessandra simmons Date: 2025-11-04T17:45:55Z New Revision: 39221718519f2ea3710cc3f5940adb13639b4f80
URL: https://github.com/llvm/llvm-project/commit/39221718519f2ea3710cc3f5940adb13639b4f80 DIFF: https://github.com/llvm/llvm-project/commit/39221718519f2ea3710cc3f5940adb13639b4f80.diff LOG: [clang][Driver][HIP] Change OffloadingActionBuilder to respect the --no-gpu-bundle-output flag (#163834) Currently, the command `clang -c -emit-llvm --no-gpu-bundle-output --offload-arch=gfx900,gfx1030 -O3 -x hip square.hip` will lead to a bundled output: ``` ❯ ../bin/clang -c -emit-llvm --no-gpu-bundle-output --offload-arch=gfx900,gfx1030 -O3 -x hip square.hip ❯ ls square.hip square.bc ``` This doesn't match my expectation of the behavior of `--no-gpu-bundle-output`, so this adds a check into OffloadingActionBuilder for the flag when replacing the host compile action for a bundling action. Added: clang/test/Driver/no-gpu-bundle-respected.hip Modified: clang/lib/Driver/Driver.cpp Removed: ################################################################################ diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 6f6a35b4c8c17..a0b82cec9a372 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -3857,6 +3857,9 @@ class OffloadingActionBuilder final { /// Flag set to true if all valid builders allow file bundling/unbundling. bool CanUseBundler; + /// Flag set to false if an argument turns off bundling. + bool ShouldUseBundler; + public: OffloadingActionBuilder(Compilation &C, DerivedArgList &Args, const Driver::InputList &Inputs) @@ -3891,6 +3894,9 @@ class OffloadingActionBuilder final { } CanUseBundler = ValidBuilders && ValidBuilders == ValidBuildersSupportingBundling; + + ShouldUseBundler = Args.hasFlag(options::OPT_gpu_bundle_output, + options::OPT_no_gpu_bundle_output, true); } ~OffloadingActionBuilder() { @@ -4042,11 +4048,11 @@ class OffloadingActionBuilder final { SB->appendTopLevelActions(OffloadAL); } - // If we can use the bundler, replace the host action by the bundling one in - // the resulting list. Otherwise, just append the device actions. For - // device only compilation, HostAction is a null pointer, therefore only do - // this when HostAction is not a null pointer. - if (CanUseBundler && HostAction && + // If we can and should use the bundler, replace the host action by the + // bundling one in the resulting list. Otherwise, just append the device + // actions. For device only compilation, HostAction is a null pointer, + // therefore only do this when HostAction is not a null pointer. + if (CanUseBundler && ShouldUseBundler && HostAction && HostAction->getType() != types::TY_Nothing && !OffloadAL.empty()) { // Add the host action to the list in order to create the bundling action. OffloadAL.push_back(HostAction); diff --git a/clang/test/Driver/no-gpu-bundle-respected.hip b/clang/test/Driver/no-gpu-bundle-respected.hip new file mode 100644 index 0000000000000..fc93640dc4b90 --- /dev/null +++ b/clang/test/Driver/no-gpu-bundle-respected.hip @@ -0,0 +1,24 @@ +// RUN: %clang -ccc-print-phases -c -emit-llvm \ +// RUN: --offload-arch=gfx900,gfx1030 -O3 -x hip %s \ +// RUN: 2>&1 | FileCheck %s --check-prefix=BUNDLE + +// RUN: %clang -ccc-print-phases -c -emit-llvm \ +// RUN: --gpu-bundle-output --offload-arch=gfx900,gfx1030 -O3 -x hip %s \ +// RUN: 2>&1 | FileCheck %s --check-prefix=BUNDLE + +// RUN: %clang -ccc-print-phases -c -emit-llvm \ +// RUN: --no-gpu-bundle-output --offload-arch=gfx900,gfx1030 -O3 -x hip %s \ +// RUN: 2>&1 | FileCheck %s --check-prefixes=COMPILER,GFX1030,GFX900,OFFLOAD,NOBUNDLE + +// BUNDLE: clang-offload-bundler +// NOBUNDLE-NOT: clang-offload-bundler + +// COM: sanity checks +// COMPILER: compiler +// GFX1030: (device-hip, gfx1030) +// GFX900: (device-hip, gfx900) +// OFFLOAD: offload + +int square(int num) { + return num * num; +} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
