[clang] 4dfc4f5 - [CIR] Emit OpenCL file scope global variables (#228125)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 2 02:50:07 PDT 2026
Author: Arseniy Obolenskiy
Date: 2026-10-02T09:49:54Z
New Revision: 4dfc4f5457efc21c8bed43dca7605f119ef35d5e
URL: https://github.com/llvm/llvm-project/commit/4dfc4f5457efc21c8bed43dca7605f119ef35d5e
DIFF: https://github.com/llvm/llvm-project/commit/4dfc4f5457efc21c8bed43dca7605f119ef35d5e.diff
LOG: [CIR] Emit OpenCL file scope global variables (#228125)
Added:
clang/test/CIR/CodeGenOpenCL/global-vars.cl
Modified:
clang/lib/CIR/CodeGen/CIRGenModule.cpp
Removed:
################################################################################
diff --git a/clang/lib/CIR/CodeGen/CIRGenModule.cpp b/clang/lib/CIR/CodeGen/CIRGenModule.cpp
index e3b433d0d10c8..8bb518f91e933 100644
--- a/clang/lib/CIR/CodeGen/CIRGenModule.cpp
+++ b/clang/lib/CIR/CodeGen/CIRGenModule.cpp
@@ -1524,9 +1524,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/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
More information about the cfe-commits
mailing list