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 <[email protected]>
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))))

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

Reply via email to