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
