https://github.com/jmmartinez updated https://github.com/llvm/llvm-project/pull/164432
From f4b068a508fe198391fb611afe330e228bf47b9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Martinez=20Caama=C3=B1o?= <[email protected]> Date: Tue, 21 Oct 2025 15:45:36 +0200 Subject: [PATCH 1/3] [Clang] Make the address space of llvm.compiler.used & llvm.used 0 --- clang/lib/CodeGen/CodeGenModule.cpp | 12 ++++++------ .../CodeGen/embed-bitcode-marker-with-nonzero-as.c | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 0fea57b2e1799..af5be95aec1cd 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -3331,18 +3331,18 @@ static void emitUsed(CodeGenModule &CGM, StringRef Name, if (List.empty()) return; + llvm::PointerType *UnqualPtr = + llvm::PointerType::getUnqual(CGM.getLLVMContext()); + // Convert List to what ConstantArray needs. SmallVector<llvm::Constant*, 8> UsedArray; UsedArray.resize(List.size()); for (unsigned i = 0, e = List.size(); i != e; ++i) { - UsedArray[i] = - llvm::ConstantExpr::getPointerBitCastOrAddrSpaceCast( - cast<llvm::Constant>(&*List[i]), CGM.Int8PtrTy); + UsedArray[i] = llvm::ConstantExpr::getPointerBitCastOrAddrSpaceCast( + cast<llvm::Constant>(&*List[i]), UnqualPtr); } - if (UsedArray.empty()) - return; - llvm::ArrayType *ATy = llvm::ArrayType::get(CGM.Int8PtrTy, UsedArray.size()); + llvm::ArrayType *ATy = llvm::ArrayType::get(UnqualPtr, UsedArray.size()); auto *GV = new llvm::GlobalVariable( CGM.getModule(), ATy, false, llvm::GlobalValue::AppendingLinkage, diff --git a/clang/test/CodeGen/embed-bitcode-marker-with-nonzero-as.c b/clang/test/CodeGen/embed-bitcode-marker-with-nonzero-as.c index df7118859c764..8af9708a1bfb8 100644 --- a/clang/test/CodeGen/embed-bitcode-marker-with-nonzero-as.c +++ b/clang/test/CodeGen/embed-bitcode-marker-with-nonzero-as.c @@ -3,6 +3,6 @@ // CHECK: @llvm.embedded.module = private addrspace(1) constant [0 x i8] zeroinitializer, section ".llvmbc", align 1 // CHECK-NEXT: @llvm.cmdline = private addrspace(1) constant [{{[0-9]+}} x i8] c"{{.*}}", section ".llvmcmd", align 1 -// CHECK-NEXT: @llvm.compiler.used = appending addrspace(1) global [5 x ptr addrspace(4)] [ptr addrspace(4) addrspacecast (ptr addrspace(1) @foo.managed to ptr addrspace(4)), ptr addrspace(4) addrspacecast (ptr addrspace(1) @foo to ptr addrspace(4)), ptr addrspace(4) addrspacecast (ptr addrspace(1) @__hip_cuid_ to ptr addrspace(4)), ptr addrspace(4) addrspacecast (ptr addrspace(1) @llvm.embedded.module to ptr addrspace(4)), ptr addrspace(4) addrspacecast (ptr addrspace(1) @llvm.cmdline to ptr addrspace(4))], section "llvm.metadata" +// CHECK-NEXT: @llvm.compiler.used = appending addrspace(1) global [5 x ptr] [ptr addrspacecast (ptr addrspace(1) @foo.managed to ptr), ptr addrspacecast (ptr addrspace(1) @foo to ptr), ptr addrspacecast (ptr addrspace(1) @__hip_cuid_ to ptr), ptr addrspacecast (ptr addrspace(1) @llvm.embedded.module to ptr), ptr addrspacecast (ptr addrspace(1) @llvm.cmdline to ptr)], section "llvm.metadata" __attribute__((managed)) int foo = 42; From 3330535d6b8ebf8f4675359662e6a16282176ce2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Martinez=20Caama=C3=B1o?= <[email protected]> Date: Wed, 22 Oct 2025 10:01:23 +0200 Subject: [PATCH 2/3] [Review] Add test --- .../llvm_compiler_used_elements_are_unqual.c | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 clang/test/CodeGen/llvm_compiler_used_elements_are_unqual.c diff --git a/clang/test/CodeGen/llvm_compiler_used_elements_are_unqual.c b/clang/test/CodeGen/llvm_compiler_used_elements_are_unqual.c new file mode 100644 index 0000000000000..38bc5c893f4bc --- /dev/null +++ b/clang/test/CodeGen/llvm_compiler_used_elements_are_unqual.c @@ -0,0 +1,38 @@ +// RUN: %clang_cc1 -triple x86_64-- -emit-llvm -x c %s -o - \ +// RUN: | FileCheck %s --check-prefix=X86 +// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -emit-llvm -x c %s -o - \ +// RUN: | FileCheck %s --check-prefix=AMDGCN +// RUN: %clang_cc1 -triple spirv64-- -emit-llvm -x c %s -o - \ +// RUN: | FileCheck %s --check-prefix=SPIRV +// RUN: %clang_cc1 -triple spirv64-amd-amdhsa -emit-llvm -x c %s -o - \ +// RUN: | FileCheck %s --check-prefix=SPIRV_AMD + +static __attribute__((__used__)) int foo = 42; + + +// X86: @foo = internal global i32 42, align 4 +// X86: @llvm.compiler.used = appending global [2 x ptr] [ptr @foo, ptr @bar], section "llvm.metadata" +//. +// AMDGCN: @foo = internal addrspace(1) global i32 42, align 4 +// AMDGCN: @llvm.compiler.used = appending addrspace(1) global [2 x ptr] [ptr addrspacecast (ptr addrspace(1) @foo to ptr), ptr @bar], section "llvm.metadata" +//. +// SPIRV: @foo = internal global i32 42, align 4 +// SPIRV: @llvm.used = appending addrspace(1) global [2 x ptr] [ptr @foo, ptr @bar], section "llvm.metadata" +//. +// SPIRV_AMD: @foo = internal addrspace(1) global i32 42, align 4 +// SPIRV_AMD: @llvm.used = appending addrspace(1) global [2 x ptr] [ptr addrspacecast (ptr addrspace(1) @foo to ptr), ptr addrspacecast (ptr addrspace(4) @bar to ptr)], section "llvm.metadata" +//. +// X86-LABEL: define internal void @bar( +// X86-SAME: ) #[[ATTR0:[0-9]+]] { +// +// AMDGCN-LABEL: define internal void @bar( +// AMDGCN-SAME: ) #[[ATTR0:[0-9]+]] { +// +// SPIRV-LABEL: define internal spir_func void @bar( +// SPIRV-SAME: ) #[[ATTR0:[0-9]+]] { +// +// SPIRV_AMD-LABEL: define internal spir_func void @bar( +// SPIRV_AMD-SAME: ) addrspace(4) #[[ATTR0:[0-9]+]] { +// +static void __attribute__((__used__)) bar() { +} From 9b8250048663a29f2ecd9a3f134a48cf4e5d4f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Manuel=20Martinez=20Caama=C3=B1o?= <[email protected]> Date: Mon, 3 Nov 2025 11:21:13 +0100 Subject: [PATCH 3/3] [Review] Add OpenCL 1.2 and 2.0 test cases --- .../llvm_compiler_used_elements_are_unqual.c | 70 +++++++++++++------ 1 file changed, 48 insertions(+), 22 deletions(-) diff --git a/clang/test/CodeGen/llvm_compiler_used_elements_are_unqual.c b/clang/test/CodeGen/llvm_compiler_used_elements_are_unqual.c index 38bc5c893f4bc..b6550fb1e5c77 100644 --- a/clang/test/CodeGen/llvm_compiler_used_elements_are_unqual.c +++ b/clang/test/CodeGen/llvm_compiler_used_elements_are_unqual.c @@ -1,38 +1,64 @@ -// RUN: %clang_cc1 -triple x86_64-- -emit-llvm -x c %s -o - \ +// RUN: %clang_cc1 -x c -triple x86_64-- -emit-llvm -x c %s -o - \ // RUN: | FileCheck %s --check-prefix=X86 -// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -emit-llvm -x c %s -o - \ +// RUN: %clang_cc1 -x c -triple amdgcn-amd-amdhsa -emit-llvm -x c %s -o - \ // RUN: | FileCheck %s --check-prefix=AMDGCN -// RUN: %clang_cc1 -triple spirv64-- -emit-llvm -x c %s -o - \ +// RUN: %clang_cc1 -x c -triple spirv64-- -emit-llvm -x c %s -o - \ // RUN: | FileCheck %s --check-prefix=SPIRV -// RUN: %clang_cc1 -triple spirv64-amd-amdhsa -emit-llvm -x c %s -o - \ +// RUN: %clang_cc1 -x c -triple spirv64-amd-amdhsa -emit-llvm -x c %s -o - \ // RUN: | FileCheck %s --check-prefix=SPIRV_AMD +// RUN: %clang_cc1 -x cl -cl-std=CL1.2 -triple x86_64-- -emit-llvm -x c %s -o - \ +// RUN: | FileCheck %s --check-prefix=X86 +// RUN: %clang_cc1 -x cl -cl-std=CL1.2 -triple amdgcn-amd-amdhsa -emit-llvm -x c %s -o - \ +// RUN: | FileCheck %s --check-prefix=AMDGCN +// RUN: %clang_cc1 -x cl -cl-std=CL1.2 -triple spirv64-- -emit-llvm -x c %s -o - \ +// RUN: | FileCheck %s --check-prefix=SPIRV_CL +// RUN: %clang_cc1 -x cl -cl-std=CL1.2 -triple spirv64-amd-amdhsa -emit-llvm -x c %s -o - \ +// RUN: | FileCheck %s --check-prefix=SPIRV_AMD_CL +// RUN: %clang_cc1 -x cl -cl-std=CL2.0 -triple x86_64-- -emit-llvm -x c %s -o - \ +// RUN: | FileCheck %s --check-prefix=X86 +// RUN: %clang_cc1 -x cl -cl-std=CL2.0 -triple amdgcn-amd-amdhsa -emit-llvm -x c %s -o - \ +// RUN: | FileCheck %s --check-prefix=AMDGCN +// RUN: %clang_cc1 -x cl -cl-std=CL2.0 -triple spirv64-- -emit-llvm -x c %s -o - \ +// RUN: | FileCheck %s --check-prefix=SPIRV_CL +// RUN: %clang_cc1 -x cl -cl-std=CL2.0 -triple spirv64-amd-amdhsa -emit-llvm -x c %s -o - \ +// RUN: | FileCheck %s --check-prefix=SPIRV_AMD_CL -static __attribute__((__used__)) int foo = 42; +#ifndef __OPENCL_C_VERSION__ +#define __constant const +#endif +static __constant __attribute__((__used__)) int foo = 42; -// X86: @foo = internal global i32 42, align 4 + +// X86: @foo = internal constant i32 42 // X86: @llvm.compiler.used = appending global [2 x ptr] [ptr @foo, ptr @bar], section "llvm.metadata" -//. -// AMDGCN: @foo = internal addrspace(1) global i32 42, align 4 -// AMDGCN: @llvm.compiler.used = appending addrspace(1) global [2 x ptr] [ptr addrspacecast (ptr addrspace(1) @foo to ptr), ptr @bar], section "llvm.metadata" -//. -// SPIRV: @foo = internal global i32 42, align 4 +// +// AMDGCN: @foo = internal addrspace(4) constant i32 42 +// AMDGCN: @llvm.compiler.used = appending addrspace(1) global [2 x ptr] [ptr addrspacecast (ptr addrspace(4) @foo to ptr), ptr @bar], section "llvm.metadata" +// +// SPIRV: @foo = internal constant i32 42 // SPIRV: @llvm.used = appending addrspace(1) global [2 x ptr] [ptr @foo, ptr @bar], section "llvm.metadata" -//. -// SPIRV_AMD: @foo = internal addrspace(1) global i32 42, align 4 +// +// SPIRV_CL: @foo = internal addrspace(2) constant i32 42 +// SPIRV_CL: @llvm.used = appending addrspace(1) global [2 x ptr] [ptr addrspacecast (ptr addrspace(2) @foo to ptr), ptr @bar], section "llvm.metadata" +// +// SPIRV_AMD: @foo = internal addrspace(1) constant i32 42 // SPIRV_AMD: @llvm.used = appending addrspace(1) global [2 x ptr] [ptr addrspacecast (ptr addrspace(1) @foo to ptr), ptr addrspacecast (ptr addrspace(4) @bar to ptr)], section "llvm.metadata" -//. -// X86-LABEL: define internal void @bar( -// X86-SAME: ) #[[ATTR0:[0-9]+]] { // -// AMDGCN-LABEL: define internal void @bar( -// AMDGCN-SAME: ) #[[ATTR0:[0-9]+]] { +// SPIRV_AMD_CL: @foo = internal addrspace(2) constant i32 42 +// SPIRV_AMD_CL: @llvm.used = appending addrspace(1) global [2 x ptr] [ptr addrspacecast (ptr addrspace(2) @foo to ptr), ptr addrspacecast (ptr addrspace(4) @bar to ptr)], section "llvm.metadata" +// +// X86: define internal void @bar() #{{[0-9]}} { +// +// AMDGCN: define internal void @bar() #{{[0-9]}} { +// +// SPIRV: define internal spir_func void @bar() #{{[0-9]}} { +// +// SPIRV_CL: define internal spir_func void @bar() #{{[0-9]}} { // -// SPIRV-LABEL: define internal spir_func void @bar( -// SPIRV-SAME: ) #[[ATTR0:[0-9]+]] { +// SPIRV_AMD: define internal spir_func void @bar() addrspace(4) #{{[0-9]}} { // -// SPIRV_AMD-LABEL: define internal spir_func void @bar( -// SPIRV_AMD-SAME: ) addrspace(4) #[[ATTR0:[0-9]+]] { +// SPIRV_AMD_CL: define internal spir_func void @bar() addrspace(4) #{{[0-9]}} { // static void __attribute__((__used__)) bar() { } _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
