https://github.com/XChy updated https://github.com/llvm/llvm-project/pull/170170

>From def58994c7e783e50260be3eba888f100956797d Mon Sep 17 00:00:00 2001
From: XChy <[email protected]>
Date: Tue, 2 Dec 2025 00:42:10 +0800
Subject: [PATCH 1/4] precommit tests

---
 clang/test/CodeGenOpenCL/ptx-calls.cl | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/clang/test/CodeGenOpenCL/ptx-calls.cl 
b/clang/test/CodeGenOpenCL/ptx-calls.cl
index ae187173b1730..0aa7024aa44bf 100644
--- a/clang/test/CodeGenOpenCL/ptx-calls.cl
+++ b/clang/test/CodeGenOpenCL/ptx-calls.cl
@@ -1,11 +1,22 @@
-// RUN: %clang_cc1 %s -triple nvptx-unknown-unknown -emit-llvm -O0 -o - | 
FileCheck %s
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py 
UTC_ARGS: --version 6
+// RUN: %clang_cc1 %s -triple nvptx-unknown-unknown -emit-llvm -O1 -o - | 
FileCheck %s
 
+// CHECK-LABEL: define dso_local void @device_function(
+// CHECK-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] {
+// CHECK-NEXT:  [[ENTRY:.*:]]
+// CHECK-NEXT:    ret void
+//
 void device_function() {
 }
-// CHECK-LABEL: define{{.*}} void @device_function()
 
+// CHECK-LABEL: define dso_local ptx_kernel void @kernel_function(
+// CHECK-SAME: ) local_unnamed_addr #[[ATTR1:[0-9]+]] !kernel_arg_addr_space 
[[META7:![0-9]+]] !kernel_arg_access_qual [[META7]] !kernel_arg_type [[META7]] 
!kernel_arg_base_type [[META7]] !kernel_arg_type_qual [[META7]] {
+// CHECK-NEXT:  [[ENTRY:.*:]]
+// CHECK-NEXT:    unreachable
+//
 __kernel void kernel_function() {
   device_function();
 }
-// CHECK-LABEL: define{{.*}} ptx_kernel void @kernel_function()
-// CHECK: call void @device_function()
+//.
+// CHECK: [[META7]] = !{}
+//.

>From 284f9f7dd2c2275566d7de4e9c51d67cb9a66911 Mon Sep 17 00:00:00 2001
From: XChy <[email protected]>
Date: Tue, 2 Dec 2025 00:43:44 +0800
Subject: [PATCH 2/4] [OpenCL][NVPTX] Don't set calling convention for OpenCL
 kernel

---
 clang/lib/CodeGen/Targets/NVPTX.cpp   | 4 +++-
 clang/test/CodeGenOpenCL/ptx-calls.cl | 2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/clang/lib/CodeGen/Targets/NVPTX.cpp 
b/clang/lib/CodeGen/Targets/NVPTX.cpp
index f6715861d91bc..5afef658c840b 100644
--- a/clang/lib/CodeGen/Targets/NVPTX.cpp
+++ b/clang/lib/CodeGen/Targets/NVPTX.cpp
@@ -277,7 +277,9 @@ void NVPTXTargetCodeGenInfo::setTargetAttributes(
     }
   }
   // Attach kernel metadata directly if compiling for NVPTX.
-  if (FD->hasAttr<DeviceKernelAttr>())
+  // NOTE: Don't set kernel calling convention for handled OpenCL kernel,
+  // otherwise the stub version of kernel would be incorrect.
+  if (FD->hasAttr<DeviceKernelAttr>() && !M.getLangOpts().OpenCL)
     F->setCallingConv(getDeviceKernelCallingConv());
 }
 
diff --git a/clang/test/CodeGenOpenCL/ptx-calls.cl 
b/clang/test/CodeGenOpenCL/ptx-calls.cl
index 0aa7024aa44bf..d5e27fce426a7 100644
--- a/clang/test/CodeGenOpenCL/ptx-calls.cl
+++ b/clang/test/CodeGenOpenCL/ptx-calls.cl
@@ -12,7 +12,7 @@ void device_function() {
 // CHECK-LABEL: define dso_local ptx_kernel void @kernel_function(
 // CHECK-SAME: ) local_unnamed_addr #[[ATTR1:[0-9]+]] !kernel_arg_addr_space 
[[META7:![0-9]+]] !kernel_arg_access_qual [[META7]] !kernel_arg_type [[META7]] 
!kernel_arg_base_type [[META7]] !kernel_arg_type_qual [[META7]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
-// CHECK-NEXT:    unreachable
+// CHECK-NEXT:    ret void
 //
 __kernel void kernel_function() {
   device_function();

>From 65787d0993ac4ba1bbdc56fffa961fd7764848ce Mon Sep 17 00:00:00 2001
From: XChy <[email protected]>
Date: Tue, 2 Dec 2025 01:15:36 +0800
Subject: [PATCH 3/4] update test

---
 clang/test/CodeGenOpenCL/reflect.cl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/clang/test/CodeGenOpenCL/reflect.cl 
b/clang/test/CodeGenOpenCL/reflect.cl
index 4abb40aa3ed50..a69e338641167 100644
--- a/clang/test/CodeGenOpenCL/reflect.cl
+++ b/clang/test/CodeGenOpenCL/reflect.cl
@@ -26,7 +26,7 @@ __kernel void kernel_function(__global int *i) {
 // CHECK-NEXT:    ret void
 //
 //
-// CHECK-LABEL: define dso_local ptx_kernel void 
@__clang_ocl_kern_imp_kernel_function(
+// CHECK-LABEL: define dso_local void @__clang_ocl_kern_imp_kernel_function(
 // CHECK-SAME: ptr addrspace(1) noundef align 4 [[I:%.*]]) #[[ATTR0]] 
!kernel_arg_addr_space [[META3]] !kernel_arg_access_qual [[META4]] 
!kernel_arg_type [[META5]] !kernel_arg_base_type [[META5]] 
!kernel_arg_type_qual [[META6]] {
 // CHECK-NEXT:  entry:
 // CHECK-NEXT:    [[I_ADDR:%.*]] = alloca ptr addrspace(1), align 4

>From e39968bfc20520a91220023ff32217f5d6619b73 Mon Sep 17 00:00:00 2001
From: XChy <[email protected]>
Date: Tue, 2 Dec 2025 11:33:05 +0800
Subject: [PATCH 4/4] use mangled name

---
 clang/lib/CodeGen/Targets/AMDGPU.cpp  |  3 ++-
 clang/lib/CodeGen/Targets/NVPTX.cpp   |  7 +++---
 clang/test/CodeGenOpenCL/ptx-calls.cl | 31 +++++++++++++++++----------
 3 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/clang/lib/CodeGen/Targets/AMDGPU.cpp 
b/clang/lib/CodeGen/Targets/AMDGPU.cpp
index e4ad078dab197..f1a9f7dc94aa9 100644
--- a/clang/lib/CodeGen/Targets/AMDGPU.cpp
+++ b/clang/lib/CodeGen/Targets/AMDGPU.cpp
@@ -441,7 +441,8 @@ void AMDGPUTargetCodeGenInfo::setTargetAttributes(
   const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D);
   if (FD) {
     setFunctionDeclAttributes(FD, F, M);
-    if (FD->hasAttr<DeviceKernelAttr>() && !M.getLangOpts().OpenCL)
+    if (FD->hasAttr<DeviceKernelAttr>() &&
+        !GV->getName().starts_with("__clang_ocl_kern_imp_"))
       F->setCallingConv(getDeviceKernelCallingConv());
   }
   if (!getABIInfo().getCodeGenOpts().EmitIEEENaNCompliantInsts)
diff --git a/clang/lib/CodeGen/Targets/NVPTX.cpp 
b/clang/lib/CodeGen/Targets/NVPTX.cpp
index 5afef658c840b..f7b885dbf7b16 100644
--- a/clang/lib/CodeGen/Targets/NVPTX.cpp
+++ b/clang/lib/CodeGen/Targets/NVPTX.cpp
@@ -12,6 +12,7 @@
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/IR/CallingConv.h"
 #include "llvm/IR/IntrinsicsNVPTX.h"
+#include "llvm/Support/Signals.h"
 
 using namespace clang;
 using namespace clang::CodeGen;
@@ -277,9 +278,9 @@ void NVPTXTargetCodeGenInfo::setTargetAttributes(
     }
   }
   // Attach kernel metadata directly if compiling for NVPTX.
-  // NOTE: Don't set kernel calling convention for handled OpenCL kernel,
-  // otherwise the stub version of kernel would be incorrect.
-  if (FD->hasAttr<DeviceKernelAttr>() && !M.getLangOpts().OpenCL)
+  // NOTE: Don't set kernel calling convention for OpenCL kernel stub.
+  if (FD->hasAttr<DeviceKernelAttr>() &&
+      !GV->getName().starts_with("__clang_ocl_kern_imp_"))
     F->setCallingConv(getDeviceKernelCallingConv());
 }
 
diff --git a/clang/test/CodeGenOpenCL/ptx-calls.cl 
b/clang/test/CodeGenOpenCL/ptx-calls.cl
index d5e27fce426a7..17c25ee78ef45 100644
--- a/clang/test/CodeGenOpenCL/ptx-calls.cl
+++ b/clang/test/CodeGenOpenCL/ptx-calls.cl
@@ -1,22 +1,31 @@
-// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py 
UTC_ARGS: --version 6
-// RUN: %clang_cc1 %s -triple nvptx-unknown-unknown -emit-llvm -O1 -o - | 
FileCheck %s
+// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py 
UTC_ARGS: --include-generated-funcs --version 6
+// RUN: %clang_cc1 %s -triple nvptx-unknown-unknown -emit-llvm -O0 -o - | 
FileCheck %s
 
+void device_function() {
+}
+
+__kernel void kernel_function() {
+  device_function();
+}
 // CHECK-LABEL: define dso_local void @device_function(
-// CHECK-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] {
+// CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
 // CHECK-NEXT:    ret void
 //
-void device_function() {
-}
-
+//
 // CHECK-LABEL: define dso_local ptx_kernel void @kernel_function(
-// CHECK-SAME: ) local_unnamed_addr #[[ATTR1:[0-9]+]] !kernel_arg_addr_space 
[[META7:![0-9]+]] !kernel_arg_access_qual [[META7]] !kernel_arg_type [[META7]] 
!kernel_arg_base_type [[META7]] !kernel_arg_type_qual [[META7]] {
+// CHECK-SAME: ) #[[ATTR1:[0-9]+]] !kernel_arg_addr_space [[META3:![0-9]+]] 
!kernel_arg_access_qual [[META3]] !kernel_arg_type [[META3]] 
!kernel_arg_base_type [[META3]] !kernel_arg_type_qual [[META3]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
+// CHECK-NEXT:    call void @__clang_ocl_kern_imp_kernel_function() 
#[[ATTR2:[0-9]+]]
+// CHECK-NEXT:    ret void
+//
+//
+// CHECK-LABEL: define dso_local void @__clang_ocl_kern_imp_kernel_function(
+// CHECK-SAME: ) #[[ATTR0]] !kernel_arg_addr_space [[META3]] 
!kernel_arg_access_qual [[META3]] !kernel_arg_type [[META3]] 
!kernel_arg_base_type [[META3]] !kernel_arg_type_qual [[META3]] {
+// CHECK-NEXT:  [[ENTRY:.*:]]
+// CHECK-NEXT:    call void @device_function() #[[ATTR2]]
 // CHECK-NEXT:    ret void
 //
-__kernel void kernel_function() {
-  device_function();
-}
 //.
-// CHECK: [[META7]] = !{}
+// CHECK: [[META3]] = !{}
 //.

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

Reply via email to