https://github.com/jhuber6 updated 
https://github.com/llvm/llvm-project/pull/208084

>From 371ae3da11d73a0298604de437a993100439f483 Mon Sep 17 00:00:00 2001
From: Joseph Huber <[email protected]>
Date: Tue, 7 Jul 2026 14:55:57 -0500
Subject: [PATCH 1/2] [Clang] Include libc wrappers for LLVM environment CUDA /
 HIP

Summary:
These wrappers (although they are empty right now) are used to inform
the offloading runtime of the supported libc / libm functions available
on the device. We do not include these for the standard HIP path because
they conflict with the alreaedy present utilities, but with the
LLVM-only route we should be able to use them.
---
 clang/lib/Driver/ToolChains/Clang.cpp          | 15 +++++++++------
 clang/test/Driver/hip-device-libs-llvm-env.hip |  2 ++
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index a30b01a675b99..35fbe336753f1 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -1163,17 +1163,20 @@ void Clang::AddPreprocessingOptions(Compilation &C, 
const JobAction &JA,
         });
   }
 
-  // If we are compiling for a GPU target we want to override the system 
headers
-  // with ones created by the 'libc' project if present.
+  // If we are compiling for a GPU target with the LLVM environment we want to
+  // override the system headers with ones created by the 'libc' project if
+  // present.
   // TODO: This should be moved to `AddClangSystemIncludeArgs` by passing the
   //       OffloadKind as an argument.
+  bool OffloadUsesLLVMLibc =
+      C.getActiveOffloadKinds() == Action::OFK_OpenMP ||
+      ((JA.isDeviceOffloading(Action::OFK_Cuda) ||
+        JA.isDeviceOffloading(Action::OFK_HIP)) &&
+       getToolChain().getTriple().getEnvironment() == llvm::Triple::LLVM);
   if (!Args.hasArg(options::OPT_nostdinc) &&
       Args.hasFlag(options::OPT_offload_inc, options::OPT_no_offload_inc,
                    true) &&
-      !Args.hasArg(options::OPT_nobuiltininc) &&
-      (C.getActiveOffloadKinds() == Action::OFK_OpenMP)) {
-    // TODO: CUDA / HIP include their own headers for some common functions
-    // implemented here. We'll need to clean those up so they do not conflict.
+      !Args.hasArg(options::OPT_nobuiltininc) && OffloadUsesLLVMLibc) {
     SmallString<128> P(D.ResourceDir);
     llvm::sys::path::append(P, "include");
     llvm::sys::path::append(P, "llvm_libc_wrappers");
diff --git a/clang/test/Driver/hip-device-libs-llvm-env.hip 
b/clang/test/Driver/hip-device-libs-llvm-env.hip
index 6d7199c9b35c3..6a0b1b5cbabb5 100644
--- a/clang/test/Driver/hip-device-libs-llvm-env.hip
+++ b/clang/test/Driver/hip-device-libs-llvm-env.hip
@@ -9,6 +9,7 @@
 // LLVMENV-NOT: oclc
 // LLVMENV-NOT: ocml
 // LLVMENV-NOT: ockl
+// LLVMENV-NOT: llvm_libc_wrappers
 
 // RUN: %clang -### --target=x86_64-linux-gnu --rocm-path=%S/Inputs/rocm \
 // RUN:   --offload-targets=amdgcn-amd-amdhsa-llvm --offload-arch=gfx90a \
@@ -18,6 +19,7 @@
 
 // INC: "-cc1" "-triple" "amdgcn-amd-amdhsa-llvm"
 // INC-SAME: "-include" "__clang_gpu_device_functions.h"
+// INC-SAME: "-internal-isystem" "{{.*}}llvm_libc_wrappers"
 
 // RUN: %clang -### --target=x86_64-linux-gnu -nogpuinc 
--rocm-path=%S/Inputs/rocm \
 // RUN:   --offload-targets=amdgcn-amd-amdhsa-llvm --offload-arch=gfx90a \

>From 7a43b66f16b721f3ed0ed4dd82eaa4af595185cf Mon Sep 17 00:00:00 2001
From: Joseph Huber <[email protected]>
Date: Tue, 7 Jul 2026 17:27:00 -0500
Subject: [PATCH 2/2] All offloading w/ llvm env

---
 clang/lib/Driver/ToolChains/Clang.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index 35fbe336753f1..6b11ada23f74b 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -1170,8 +1170,7 @@ void Clang::AddPreprocessingOptions(Compilation &C, const 
JobAction &JA,
   //       OffloadKind as an argument.
   bool OffloadUsesLLVMLibc =
       C.getActiveOffloadKinds() == Action::OFK_OpenMP ||
-      ((JA.isDeviceOffloading(Action::OFK_Cuda) ||
-        JA.isDeviceOffloading(Action::OFK_HIP)) &&
+      (C.getActiveOffloadKinds() != Action::OFK_None &&
        getToolChain().getTriple().getEnvironment() == llvm::Triple::LLVM);
   if (!Args.hasArg(options::OPT_nostdinc) &&
       Args.hasFlag(options::OPT_offload_inc, options::OPT_no_offload_inc,

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

Reply via email to