https://github.com/sarnex created 
https://github.com/llvm/llvm-project/pull/162914

None

>From 17b45c875224b5de3ba38cfe79a9d83641545ffc Mon Sep 17 00:00:00 2001
From: "Sarnie, Nick" <[email protected]>
Date: Fri, 10 Oct 2025 13:18:02 -0700
Subject: [PATCH] [clang][OMPIRBuilder] Fix missed function pointer type issue

Signed-off-by: Sarnie, Nick <[email protected]>
---
 clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp              | 11 ++++++-----
 ...> target_parallel_num_threads_strict_messages.cpp} |  7 +++++++
 llvm/include/llvm/Frontend/OpenMP/OMPKinds.def        |  2 +-
 3 files changed, 14 insertions(+), 6 deletions(-)
 rename clang/test/OpenMP/{amdgcn_parallel_num_threads_strict_messages.cpp => 
target_parallel_num_threads_strict_messages.cpp} (73%)

diff --git a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp 
b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
index 3613b6a143d42..fddeba98adccc 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp
@@ -7,7 +7,7 @@
 
//===----------------------------------------------------------------------===//
 //
 // This provides a generalized class for OpenMP runtime code generation
-// specialized by GPU targets NVPTX and AMDGCN.
+// specialized by GPU targets NVPTX, AMDGCN and SPIR-V.
 //
 
//===----------------------------------------------------------------------===//
 
@@ -1242,12 +1242,13 @@ void CGOpenMPRuntimeGPU::emitParallelCall(
     CGBuilderTy &Bld = CGF.Builder;
     llvm::Value *NumThreadsVal = NumThreads;
     llvm::Function *WFn = WrapperFunctionsMap[OutlinedFn];
-    llvm::Value *ID = llvm::ConstantPointerNull::get(CGM.Int8PtrTy);
-    if (WFn)
-      ID = Bld.CreateBitOrPointerCast(WFn, CGM.Int8PtrTy);
-    llvm::Type *FnPtrTy = llvm::PointerType::get(
+    llvm::PointerType *FnPtrTy = llvm::PointerType::get(
         CGF.getLLVMContext(), CGM.getDataLayout().getProgramAddressSpace());
 
+    llvm::Value *ID = llvm::ConstantPointerNull::get(FnPtrTy);
+    if (WFn)
+      ID = Bld.CreateBitOrPointerCast(WFn, FnPtrTy);
+
     llvm::Value *FnPtr = Bld.CreateBitOrPointerCast(OutlinedFn, FnPtrTy);
 
     // Create a private scope that will globalize the arguments
diff --git a/clang/test/OpenMP/amdgcn_parallel_num_threads_strict_messages.cpp 
b/clang/test/OpenMP/target_parallel_num_threads_strict_messages.cpp
similarity index 73%
rename from clang/test/OpenMP/amdgcn_parallel_num_threads_strict_messages.cpp
rename to clang/test/OpenMP/target_parallel_num_threads_strict_messages.cpp
index 513754b0bbad9..8ceff02d4ecfc 100644
--- a/clang/test/OpenMP/amdgcn_parallel_num_threads_strict_messages.cpp
+++ b/clang/test/OpenMP/target_parallel_num_threads_strict_messages.cpp
@@ -5,6 +5,13 @@
 // RUN: %clang_cc1 -DF3 -verify -fopenmp -fopenmp-version=60 -triple 
x86_64-unknown-unknown -fopenmp-targets=amdgcn-amd-amdhsa -emit-llvm-bc %s -o 
%t-ppc-host-ppc.bc
 // RUN: %clang_cc1 -DF3 -DTARGET -verify -fopenmp -fopenmp-version=60 -triple 
amdgcn-amd-amdhsa -fopenmp-targets=amdgcn-amd-amdhsa -emit-llvm %s 
-fopenmp-is-target-device -fopenmp-host-ir-file-path %t-ppc-host-ppc.bc -o 
/dev/null
 
+// RUN: %clang_cc1 -DF1 -verify -fopenmp -fopenmp-version=60 -triple 
x86_64-unknown-unknown -fopenmp-targets=spirv64-intel -emit-llvm-bc %s -o 
%t-spirv-ppc-host-ppc.bc
+// RUN: %clang_cc1 -DF1 -DTARGET -verify -fopenmp -fopenmp-version=60 -triple 
spirv64-intel -fopenmp-targets=spirv64-intel -emit-llvm %s 
-fopenmp-is-target-device -fopenmp-host-ir-file-path %t-spirv-ppc-host-ppc.bc 
-o /dev/null
+// RUN: %clang_cc1 -DF2 -verify -fopenmp -fopenmp-version=60 -triple 
x86_64-unknown-unknown -fopenmp-targets=spirv64-intel -emit-llvm-bc %s -o 
%t-spirv-ppc-host-ppc.bc
+// RUN: %clang_cc1 -DF2 -DTARGET -verify -fopenmp -fopenmp-version=60 -triple 
spirv64-intel -fopenmp-targets=spirv64-intel -emit-llvm %s 
-fopenmp-is-target-device -fopenmp-host-ir-file-path %t-spirv-ppc-host-ppc.bc 
-o /dev/null
+// RUN: %clang_cc1 -DF3 -verify -fopenmp -fopenmp-version=60 -triple 
x86_64-unknown-unknown -fopenmp-targets=spirv64-intel -emit-llvm-bc %s -o 
%t-spirv-ppc-host-ppc.bc
+// RUN: %clang_cc1 -DF3 -DTARGET -verify -fopenmp -fopenmp-version=60 -triple 
spirv64-intel -fopenmp-targets=spirv64-intel -emit-llvm %s 
-fopenmp-is-target-device -fopenmp-host-ir-file-path %t-spirv-ppc-host-ppc.bc 
-o /dev/null
+
 #ifndef TARGET
 // expected-no-diagnostics
 #endif
diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def 
b/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
index 1694a33510d79..46b3d53a4b408 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
+++ b/llvm/include/llvm/Frontend/OpenMP/OMPKinds.def
@@ -472,7 +472,7 @@ __OMP_RTL(__kmpc_target_init, false, Int32, 
KernelEnvironmentPtr, KernelLaunchEn
 __OMP_RTL(__kmpc_target_deinit, false, Void,)
 __OMP_RTL(__kmpc_kernel_prepare_parallel, false, Void, VoidPtr)
 __OMP_RTL(__kmpc_parallel_51, false, Void, IdentPtr, Int32, Int32, Int32, 
Int32,
-          FuncPtrTy, VoidPtr, VoidPtrPtr, SizeTy)
+          FuncPtrTy, FuncPtrTy, VoidPtrPtr, SizeTy)
 __OMP_RTL(__kmpc_for_static_loop_4, false, Void, IdentPtr, VoidPtr, VoidPtr, 
Int32, Int32, Int32, Int8)
 __OMP_RTL(__kmpc_for_static_loop_4u, false, Void, IdentPtr, VoidPtr, VoidPtr, 
Int32, Int32, Int32, Int8)
 __OMP_RTL(__kmpc_for_static_loop_8, false, Void, IdentPtr, VoidPtr, VoidPtr, 
Int64, Int64, Int64, Int8)

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

Reply via email to