[clang] clang: Reorder linker aux-triple handling (PR #189462)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 30 12:46:30 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-driver
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
Move the IsCuda check out from the IsCuda || isHIP block. Keep
this from splitting the aux-triple handling for future convenience.
---
Full diff: https://github.com/llvm/llvm-project/pull/189462.diff
1 Files Affected:
- (modified) clang/lib/Driver/ToolChains/Clang.cpp (+20-19)
``````````diff
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 31240ef81d4ff..d69898cadaaa9 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -5025,34 +5025,23 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
}
if (IsCuda || IsHIP) {
+ CmdArgs.push_back("-aux-triple");
+
// We have to pass the triple of the host if compiling for a CUDA/HIP device
// and vice-versa.
- StringRef TripleStr;
- if (JA.isDeviceOffloading(Action::OFK_Cuda) ||
- JA.isDeviceOffloading(Action::OFK_HIP))
- TripleStr =
+ if (IsCudaDevice || IsHIPDevice) {
+ StringRef AuxTripleStr =
C.getSingleOffloadToolChain<Action::OFK_Host>()->getTriple().str();
- else {
+ CmdArgs.push_back(Args.MakeArgStringRef(AuxTripleStr));
+ } else {
// Host-side compilation.
- TripleStr =
+ StringRef AuxTripleStr =
(IsCuda ? C.getOffloadToolChains(Action::OFK_Cuda).first->second
: C.getOffloadToolChains(Action::OFK_HIP).first->second)
->getTriple()
.str();
- if (IsCuda) {
- // We need to figure out which CUDA version we're compiling for, as that
- // determines how we load and launch GPU kernels.
- auto *CTC = static_cast<const toolchains::CudaToolChain *>(
- C.getSingleOffloadToolChain<Action::OFK_Cuda>());
- assert(CTC && "Expected valid CUDA Toolchain.");
- if (CTC && CTC->CudaInstallation.version() != CudaVersion::UNKNOWN)
- CmdArgs.push_back(Args.MakeArgString(
- Twine("-target-sdk-version=") +
- CudaVersionToString(CTC->CudaInstallation.version())));
- }
+ CmdArgs.push_back(Args.MakeArgStringRef(AuxTripleStr));
}
- CmdArgs.push_back("-aux-triple");
- CmdArgs.push_back(Args.MakeArgString(TripleStr));
if (JA.isDeviceOffloading(Action::OFK_HIP) &&
(getToolChain().getTriple().isAMDGPU() ||
@@ -5070,6 +5059,18 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
}
}
+ if (IsCuda && !IsCudaDevice) {
+ // We need to figure out which CUDA version we're compiling for, as that
+ // determines how we load and launch GPU kernels.
+ auto *CTC = static_cast<const toolchains::CudaToolChain *>(
+ C.getSingleOffloadToolChain<Action::OFK_Cuda>());
+ assert(CTC && "Expected valid CUDA Toolchain.");
+ if (CTC && CTC->CudaInstallation.version() != CudaVersion::UNKNOWN)
+ CmdArgs.push_back(Args.MakeArgString(
+ Twine("-target-sdk-version=") +
+ CudaVersionToString(CTC->CudaInstallation.version())));
+ }
+
// Optimization level for CodeGen.
if (const Arg *A = Args.getLastArg(options::OPT_O_Group)) {
if (A->getOption().matches(options::OPT_O4)) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/189462
More information about the cfe-commits
mailing list