https://github.com/aobolensk updated 
https://github.com/llvm/llvm-project/pull/228125

>From 8f8502e2d536106e16187e249d28e905c518c4b5 Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <[email protected]>
Date: Thu, 1 Oct 2026 18:12:25 +0200
Subject: [PATCH 1/2] [CIR] Emit OpenCL file scope global variables

---
 clang/lib/CIR/CodeGen/CIRGenModule.cpp         |  9 +++++++--
 clang/test/CIR/CodeGenOpenCL/address-spaces.cl | 15 +++++++++++++++
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/clang/lib/CIR/CodeGen/CIRGenModule.cpp 
b/clang/lib/CIR/CodeGen/CIRGenModule.cpp
index cc0f36a0e7992..072fa38899f52 100644
--- a/clang/lib/CIR/CodeGen/CIRGenModule.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenModule.cpp
@@ -1509,9 +1509,14 @@ void CIRGenModule::emitLLVMUsed() {
 
 void CIRGenModule::emitGlobalVarDefinition(const clang::VarDecl *vd,
                                            bool isTentative) {
-  if (getLangOpts().OpenCL || getLangOpts().OpenMPIsTargetDevice) {
+  // OpenCL global variables of sampler type are translated to function calls,
+  // therefore no need to be translated.
+  if (getLangOpts().OpenCL && vd->getType()->isSamplerT())
+    return;
+
+  if (getLangOpts().OpenMPIsTargetDevice) {
     errorNYI(vd->getSourceRange(),
-             "emitGlobalVarDefinition: emit OpenCL/OpenMP global variable");
+             "emitGlobalVarDefinition: emit OpenMP global variable");
     return;
   }
 
diff --git a/clang/test/CIR/CodeGenOpenCL/address-spaces.cl 
b/clang/test/CIR/CodeGenOpenCL/address-spaces.cl
index 42941fad9ea42..79e863af2bc66 100644
--- a/clang/test/CIR/CodeGenOpenCL/address-spaces.cl
+++ b/clang/test/CIR/CodeGenOpenCL/address-spaces.cl
@@ -11,6 +11,21 @@
 
 typedef global int *global_int_ptr;
 
+constant int const_gv = 42;
+global int global_gv = 7;
+global int tentative_gv;
+const sampler_t sampler_gv = 0;
+
+// CIR-DAG: cir.global constant external lang_address_space(offload_constant) 
@const_gv = #cir.int<42> : !s32i
+// CIR-DAG: cir.global external lang_address_space(offload_global) @global_gv 
= #cir.int<7> : !s32i
+// CIR-DAG: cir.global external lang_address_space(offload_global) 
@tentative_gv = #cir.int<0> : !s32i
+// CIR-NOT: @sampler_gv
+
+// LLVM-DAG: @const_gv = addrspace(2) constant i32 42
+// LLVM-DAG: @global_gv = addrspace(1) global i32 7
+// LLVM-DAG: @tentative_gv = addrspace(1) global i32 0
+// LLVM-NOT: @sampler_gv
+
 void pointer_types(
     private int *private_ptr, local int *local_ptr, global int *global_ptr,
     constant int *constant_ptr, generic int *generic_ptr,

>From fc80ad7564a3abad1a4400dbfeb913f4a01ff306 Mon Sep 17 00:00:00 2001
From: Arseniy Obolenskiy <[email protected]>
Date: Fri, 2 Oct 2026 09:12:21 +0200
Subject: [PATCH 2/2] move test to separate file

---
 .../test/CIR/CodeGenOpenCL/address-spaces.cl  | 15 -----------
 clang/test/CIR/CodeGenOpenCL/global-vars.cl   | 25 +++++++++++++++++++
 2 files changed, 25 insertions(+), 15 deletions(-)
 create mode 100644 clang/test/CIR/CodeGenOpenCL/global-vars.cl

diff --git a/clang/test/CIR/CodeGenOpenCL/address-spaces.cl 
b/clang/test/CIR/CodeGenOpenCL/address-spaces.cl
index 79e863af2bc66..42941fad9ea42 100644
--- a/clang/test/CIR/CodeGenOpenCL/address-spaces.cl
+++ b/clang/test/CIR/CodeGenOpenCL/address-spaces.cl
@@ -11,21 +11,6 @@
 
 typedef global int *global_int_ptr;
 
-constant int const_gv = 42;
-global int global_gv = 7;
-global int tentative_gv;
-const sampler_t sampler_gv = 0;
-
-// CIR-DAG: cir.global constant external lang_address_space(offload_constant) 
@const_gv = #cir.int<42> : !s32i
-// CIR-DAG: cir.global external lang_address_space(offload_global) @global_gv 
= #cir.int<7> : !s32i
-// CIR-DAG: cir.global external lang_address_space(offload_global) 
@tentative_gv = #cir.int<0> : !s32i
-// CIR-NOT: @sampler_gv
-
-// LLVM-DAG: @const_gv = addrspace(2) constant i32 42
-// LLVM-DAG: @global_gv = addrspace(1) global i32 7
-// LLVM-DAG: @tentative_gv = addrspace(1) global i32 0
-// LLVM-NOT: @sampler_gv
-
 void pointer_types(
     private int *private_ptr, local int *local_ptr, global int *global_ptr,
     constant int *constant_ptr, generic int *generic_ptr,
diff --git a/clang/test/CIR/CodeGenOpenCL/global-vars.cl 
b/clang/test/CIR/CodeGenOpenCL/global-vars.cl
new file mode 100644
index 0000000000000..9d45f33d57859
--- /dev/null
+++ b/clang/test/CIR/CodeGenOpenCL/global-vars.cl
@@ -0,0 +1,25 @@
+// RUN: %clang_cc1 -x cl -triple spir64 -cl-std=CL2.0 -fclangir -emit-cir \
+// RUN:   -Wno-deprecated-attributes -mmlir \
+// RUN:   --mlir-print-ir-before=cir-target-lowering %s -o %t.cir 2> %t.pre.cir
+// RUN: FileCheck %s --check-prefix=CIR --input-file=%t.pre.cir
+// RUN: %clang_cc1 -x cl -triple spirv64-unknown-unknown -cl-std=CL2.0 \
+// RUN:   -fclangir -emit-llvm -O0 -Wno-deprecated-attributes %s -o %t.cir.ll
+// RUN: FileCheck %s --check-prefix=LLVM --input-file=%t.cir.ll
+// RUN: %clang_cc1 -x cl -triple spirv64-unknown-unknown -cl-std=CL2.0 \
+// RUN:   -emit-llvm -O0 -Wno-deprecated-attributes %s -o %t.ogcg.ll
+// RUN: FileCheck %s --check-prefix=LLVM --input-file=%t.ogcg.ll
+
+constant int const_gv = 42;
+global int global_gv = 7;
+global int tentative_gv;
+const sampler_t sampler_gv = 0;
+
+// CIR-DAG: cir.global constant external lang_address_space(offload_constant) 
@const_gv = #cir.int<42> : !s32i
+// CIR-DAG: cir.global external lang_address_space(offload_global) @global_gv 
= #cir.int<7> : !s32i
+// CIR-DAG: cir.global external lang_address_space(offload_global) 
@tentative_gv = #cir.int<0> : !s32i
+// CIR-NOT: @sampler_gv
+
+// LLVM-DAG: @const_gv = addrspace(2) constant i32 42
+// LLVM-DAG: @global_gv = addrspace(1) global i32 7
+// LLVM-DAG: @tentative_gv = addrspace(1) global i32 0
+// LLVM-NOT: @sampler_gv

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

Reply via email to