[clang] [NFC][clang][driver] Improve readability of long and complex if statement (PR #164994)
Manuel Carrasco via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 17 03:16:05 PST 2025
https://github.com/mgcarrasco updated https://github.com/llvm/llvm-project/pull/164994
>From 43455f0f4c8a1d108196a59500d799710428cfa1 Mon Sep 17 00:00:00 2001
From: Manuel Carrasco <Manuel.Carrasco at amd.com>
Date: Mon, 17 Nov 2025 04:44:07 -0600
Subject: [PATCH] [NFC][clang][driver] Improve readability of long and complex
if statement
---
clang/lib/Driver/Driver.cpp | 67 ++++++++++++++++++++-----------------
1 file changed, 36 insertions(+), 31 deletions(-)
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 04fd68692d8d8..d882812580db2 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -5191,50 +5191,55 @@ Action *Driver::ConstructPhaseAction(
return C.MakeAction<CompileJobAction>(Input, types::TY_LLVM_BC);
}
case phases::Backend: {
+ bool IsOffloadHIP = TargetDeviceOffloadKind == Action::OFK_HIP;
+ bool IsNewOffloadDriver =
+ Args.hasFlag(options::OPT_offload_new_driver,
+ options::OPT_no_offload_new_driver, false);
// Skip a redundant Backend phase for HIP device code when using the new
// offload driver, where mid-end is done in linker wrapper.
- if (TargetDeviceOffloadKind == Action::OFK_HIP &&
- Args.hasFlag(options::OPT_offload_new_driver,
- options::OPT_no_offload_new_driver, false) &&
- !offloadDeviceOnly())
+ if (IsOffloadHIP && IsNewOffloadDriver && !offloadDeviceOnly())
return Input;
-
- if (isUsingLTO() && TargetDeviceOffloadKind == Action::OFK_None) {
+ bool IsOffloadBuild = TargetDeviceOffloadKind != Action::OFK_None;
+ bool IsEmitLLVM = Args.hasArg(options::OPT_emit_llvm);
+ bool IsEmitAssembly = Args.hasArg(options::OPT_S);
+ if (isUsingLTO() && !IsOffloadBuild) {
types::ID Output;
- if (Args.hasArg(options::OPT_ffat_lto_objects) &&
- !Args.hasArg(options::OPT_emit_llvm))
+ if (Args.hasArg(options::OPT_ffat_lto_objects) && !IsEmitLLVM)
Output = types::TY_PP_Asm;
- else if (Args.hasArg(options::OPT_S))
+ else if (IsEmitAssembly)
Output = types::TY_LTO_IR;
else
Output = types::TY_LTO_BC;
return C.MakeAction<BackendJobAction>(Input, Output);
}
- if (isUsingOffloadLTO() && TargetDeviceOffloadKind != Action::OFK_None) {
- types::ID Output =
- Args.hasArg(options::OPT_S) ? types::TY_LTO_IR : types::TY_LTO_BC;
+ if (isUsingOffloadLTO() && IsOffloadBuild) {
+ types::ID Output = IsEmitAssembly ? types::TY_LTO_IR : types::TY_LTO_BC;
return C.MakeAction<BackendJobAction>(Input, Output);
}
- if (Args.hasArg(options::OPT_emit_llvm) ||
- TargetDeviceOffloadKind == Action::OFK_SYCL ||
- (((Input->getOffloadingToolChain() &&
- Input->getOffloadingToolChain()->getTriple().isAMDGPU() &&
- TargetDeviceOffloadKind != Action::OFK_None) ||
- TargetDeviceOffloadKind == Action::OFK_HIP) &&
- ((Args.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc,
- false) ||
- (Args.hasFlag(options::OPT_offload_new_driver,
- options::OPT_no_offload_new_driver, false) &&
- (!offloadDeviceOnly() ||
- (Input->getOffloadingToolChain() &&
- TargetDeviceOffloadKind == Action::OFK_HIP &&
- Input->getOffloadingToolChain()->getTriple().isSPIRV())))) ||
- TargetDeviceOffloadKind == Action::OFK_OpenMP))) {
+
+ bool IsOffloadSYCL = TargetDeviceOffloadKind == Action::OFK_SYCL;
+ auto OffloadingToolChain = Input->getOffloadingToolChain();
+ bool IsAMDGPUForOffloadDevice =
+ OffloadingToolChain && OffloadingToolChain->getTriple().isAMDGPU() &&
+ IsOffloadBuild;
+ bool IsRDC =
+ Args.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc, false);
+ bool IsSPIRV =
+ OffloadingToolChain && OffloadingToolChain->getTriple().isSPIRV();
+ bool IsOffloadOpenMP = TargetDeviceOffloadKind == Action::OFK_OpenMP;
+
+ bool IsLLVMBitcodeOutput =
+ IsEmitLLVM || IsOffloadSYCL ||
+ ((IsAMDGPUForOffloadDevice || IsOffloadHIP) &&
+ ((IsRDC || (IsNewOffloadDriver &&
+ (!offloadDeviceOnly() || (IsOffloadHIP && IsSPIRV)))) ||
+ IsOffloadOpenMP));
+
+ if (IsLLVMBitcodeOutput) {
types::ID Output =
- Args.hasArg(options::OPT_S) &&
- (TargetDeviceOffloadKind == Action::OFK_None ||
- offloadDeviceOnly() ||
- (TargetDeviceOffloadKind == Action::OFK_HIP &&
+ EmitAssembly &&
+ (!IsOffloadBuild || offloadDeviceOnly() ||
+ (IsOffloadHIP &&
!Args.hasFlag(options::OPT_offload_new_driver,
options::OPT_no_offload_new_driver,
C.isOffloadingHostKind(Action::OFK_Cuda))))
More information about the cfe-commits
mailing list