Skip to content

Conversation

@mgcarrasco
Copy link
Contributor

No description provided.

@llvmbot llvmbot added clang Clang issues not falling into any other category clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' labels Oct 24, 2025
@llvmbot
Copy link
Member

llvmbot commented Oct 24, 2025

@llvm/pr-subscribers-clang-driver

@llvm/pr-subscribers-clang

Author: Manuel Carrasco (mgcarrasco)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/164994.diff

1 Files Affected:

  • (modified) clang/lib/Driver/Driver.cpp (+26-14)
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 40ea513e85427..3b9d3ab23a952 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -5191,20 +5191,32 @@ Action *Driver::ConstructPhaseAction(
           Args.hasArg(options::OPT_S) ? 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_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 IsEmitLLVM = Args.hasArg(options::OPT_emit_llvm);
+    bool IsSYCL = TargetDeviceOffloadKind == Action::OFK_SYCL;
+
+    bool IsAMDGPU = Input->getOffloadingToolChain() &&
+                    Input->getOffloadingToolChain()->getTriple().isAMDGPU();
+    bool IsRDC =
+        Args.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc, false);
+    bool HasNewOffloadDriver =
+        Args.hasFlag(options::OPT_offload_new_driver,
+                     options::OPT_no_offload_new_driver, false);
+    bool IsHIP = TargetDeviceOffloadKind == Action::OFK_HIP;
+    bool IsSPIRV = Input->getOffloadingToolChain() &&
+                   Input->getOffloadingToolChain()->getTriple().isSPIRV();
+    bool IsAMDGPUOrHIP = IsAMDGPU || IsHIP;
+    bool IsHIPToSPIRV = IsHIP && IsSPIRV;
+    bool IsOpenMP = TargetDeviceOffloadKind == Action::OFK_OpenMP;
+
+    bool IsLLVMBitcodeOutput =
+        IsEmitLLVM || IsSYCL ||
+        (IsAMDGPUOrHIP &&
+         ((IsRDC ||
+           (HasNewOffloadDriver && (!offloadDeviceOnly() || IsHIPToSPIRV))) ||
+          IsOpenMP));
+
+    if (IsLLVMBitcodeOutput) {
       types::ID Output =
           Args.hasArg(options::OPT_S) &&
                   (TargetDeviceOffloadKind == Action::OFK_None ||

@mgcarrasco mgcarrasco self-assigned this Oct 24, 2025
@mgcarrasco mgcarrasco requested a review from jhuber6 October 27, 2025 16:28
@mgcarrasco mgcarrasco force-pushed the pr/driver/if-refactor branch from ed03d9d to cfd6db2 Compare October 28, 2025 10:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' clang Clang issues not falling into any other category

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants