https://github.com/yxsamliu created 
https://github.com/llvm/llvm-project/pull/206350

[HIP] Remove redundant device optimization pipeline

The new offload driver passes device bitcode to the linker wrapper. The linker 
wrapper runs the LLVM optimization pipeline when it compiles that bitcode to 
ISA, so running the same pipeline during the earlier clang source-to-bitcode 
step is redundant.

Pass -disable-llvm-passes to the HIP device cc1 job when clang is producing 
intermediate device bitcode for the new offload driver. Do not add it for 
user-requested -emit-llvm output, where the clang driver output is LLVM IR or 
bitcode and the requested optimization level should still be honored.



>From 2d88fd818af51d9c5470fc9f9e68448e2275fead Mon Sep 17 00:00:00 2001
From: "Yaxun (Sam) Liu" <[email protected]>
Date: Fri, 26 Jun 2026 13:29:24 -0400
Subject: [PATCH] [HIP] Remove redundant device optimization pipeline

The new offload driver passes device bitcode to the linker wrapper. The linker 
wrapper runs the LLVM optimization pipeline when it compiles that bitcode to 
ISA, so running the same pipeline during the earlier clang source-to-bitcode 
step is redundant.

Pass -disable-llvm-passes to the HIP device cc1 job when clang is producing 
intermediate device bitcode for the new offload driver. Do not add it for 
user-requested -emit-llvm output, where the clang driver output is LLVM IR or 
bitcode and the requested optimization level should still be honored.
---
 clang/lib/Driver/ToolChains/Clang.cpp         | 11 ++++++++
 .../hip-new-driver-disable-llvm-passes.hip    | 25 +++++++++++++++++++
 2 files changed, 36 insertions(+)
 create mode 100644 clang/test/Driver/hip-new-driver-disable-llvm-passes.hip

diff --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index bb3fbc3c585a6..8e93e95aefb45 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -5428,6 +5428,17 @@ void Clang::ConstructJob(Compilation &C, const JobAction 
&JA,
           CmdArgs.push_back("-flto-unit");
       }
     }
+
+    // The linker wrapper runs LLVM optimization when it lowers device bitcode
+    // to ISA. Skip it here for new-driver HIP intermediate bitcode, but keep
+    // the user's opt level for final -emit-llvm output.
+    if ((JA.getType() == types::TY_LLVM_BC ||
+         JA.getType() == types::TY_LTO_BC) &&
+        IsHIPDevice && !Args.hasArg(options::OPT_emit_llvm) &&
+        Args.hasFlag(options::OPT_offload_new_driver,
+                     options::OPT_no_offload_new_driver,
+                     C.getActiveOffloadKinds() != Action::OFK_None))
+      CmdArgs.push_back("-disable-llvm-passes");
   }
 
   Args.AddLastArg(CmdArgs, options::OPT_dumpdir);
diff --git a/clang/test/Driver/hip-new-driver-disable-llvm-passes.hip 
b/clang/test/Driver/hip-new-driver-disable-llvm-passes.hip
new file mode 100644
index 0000000000000..4e9787d2705ee
--- /dev/null
+++ b/clang/test/Driver/hip-new-driver-disable-llvm-passes.hip
@@ -0,0 +1,25 @@
+// RUN: %clang -### --target=x86_64-linux-gnu \
+// RUN:   --offload-arch=gfx90a -nogpuinc -nogpulib \
+// RUN:   -O3 -c -x hip %s 2>&1 | FileCheck -check-prefix=DEFAULT %s
+// RUN: %clang -### --target=x86_64-linux-gnu \
+// RUN:   --offload-arch=gfx90a -nogpuinc -nogpulib \
+// RUN:   -O3 --cuda-device-only -emit-llvm -c -x hip %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=USER-BC %s
+// RUN: %clang -### --target=x86_64-linux-gnu \
+// RUN:   --offload-arch=gfx90a -nogpuinc -nogpulib \
+// RUN:   -O3 --cuda-device-only -emit-llvm -S -x hip %s 2>&1 \
+// RUN:   | FileCheck -check-prefix=USER-IR %s
+
+// DEFAULT: "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// DEFAULT-SAME: "-emit-llvm-bc"
+// DEFAULT-SAME: "-disable-llvm-passes"
+// DEFAULT: "{{.*}}llvm-offload-binary"
+// DEFAULT: "{{.*}}clang-linker-wrapper"
+
+// USER-BC: "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// USER-BC-SAME: "-emit-llvm-bc"
+// USER-BC-NOT: "-disable-llvm-passes"
+
+// USER-IR: "-cc1" "-triple" "amdgcn-amd-amdhsa"
+// USER-IR-SAME: "-emit-llvm"
+// USER-IR-NOT: "-disable-llvm-passes"

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

Reply via email to