https://github.com/koparasy created 
https://github.com/llvm/llvm-project/pull/230324

Port clang/test/CodeGenSYCL/sycl-module-id.cpp to ClangIR.

FWIW I will port the SYCL tests from OG to CIR. That will likely make it easier 
to track what is missing.

>From a0b5be71a8af228e210e448e30ab895305642169 Mon Sep 17 00:00:00 2001
From: Konstantinos Parasyris <[email protected]>
Date: Thu, 8 Oct 2026 16:47:29 -0700
Subject: [PATCH] [CIR][SYCL][NFC] Add sycl-module-id test

Port clang/test/CodeGenSYCL/sycl-module-id.cpp to ClangIR.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
---
 clang/test/CIR/CodeGenSYCL/sycl-module-id.cpp | 35 +++++++++++++++++++
 1 file changed, 35 insertions(+)
 create mode 100644 clang/test/CIR/CodeGenSYCL/sycl-module-id.cpp

diff --git a/clang/test/CIR/CodeGenSYCL/sycl-module-id.cpp 
b/clang/test/CIR/CodeGenSYCL/sycl-module-id.cpp
new file mode 100644
index 00000000000000..6f92d3091ed75a
--- /dev/null
+++ b/clang/test/CIR/CodeGenSYCL/sycl-module-id.cpp
@@ -0,0 +1,35 @@
+// RUN: %clang_cc1 -fsycl-is-device -triple spir64-unknown-unknown 
-disable-llvm-passes -fclangir -emit-cir %s -o %t.cir
+// RUN: FileCheck --input-file=%t.cir %s -check-prefix=CIR
+// RUN: %clang_cc1 -fsycl-is-device -triple spir64-unknown-unknown 
-disable-llvm-passes -fclangir -emit-llvm %s -o %t-cir.ll
+// RUN: FileCheck --input-file=%t-cir.ll %s -check-prefix=LLVM
+// RUN: %clang_cc1 -fsycl-is-device -triple spir64-unknown-unknown 
-disable-llvm-passes -emit-llvm %s -o %t.ll
+// RUN: FileCheck --input-file=%t.ll %s -check-prefix=LLVM
+
+// Verify that the "sycl-module-id" function attribute is emitted for:
+// 1. SYCL kernels
+// 2. sycl_external functions
+
+// Required by sycl_kernel_entry_point semantics.
+template <typename KernelName, typename... Ts>
+void sycl_kernel_launch(const char *, Ts...) {}
+
+template <typename KernelName, typename KernelType>
+[[clang::sycl_kernel_entry_point(KernelName)]]
+void kernel_single_task(KernelType kf) { kf(); }
+
+struct KN;
+struct K { void operator()() const {} };
+void use() { kernel_single_task<KN>(K{}); }
+
+[[clang::sycl_external]] int ext(int x) { return x + 1; }
+
+// Both the kernel and the sycl_external function must carry sycl-module-id
+// with a value equal to the module identifier (the source file path).
+// CIR: module @"[[MODID:.*]]" attributes
+// CIR-DAG: cir.func {{.*}}@_Z3exti({{.*}} attributes {{{.*}}"sycl-module-id" 
= "[[MODID]]"}
+// CIR-DAG: cir.func {{.*}}@_ZTS2KN({{.*}} attributes {{{.*}}"sycl-module-id" 
= "[[MODID]]"}
+
+// LLVM: source_filename = "[[MODID:.*]]"
+// LLVM-DAG: define {{.*}}spir_kernel {{.*}}@{{.*}}2KN{{.*}} #[[SATTR:[0-9]+]]
+// LLVM-DAG: define {{.*}}spir_func {{.*}}@_Z3exti{{.*}} #[[SATTR]]
+// LLVM: attributes #[[SATTR]] = { {{.*}}"sycl-module-id"="[[MODID]]"

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

Reply via email to