Author: Arseniy Obolenskiy Date: 2026-10-21T06:11:59+02:00 New Revision: 81dca70621b80b5dbf7cbd6ec889fbaa0419c4df
URL: https://github.com/llvm/llvm-project/commit/81dca70621b80b5dbf7cbd6ec889fbaa0419c4df DIFF: https://github.com/llvm/llvm-project/commit/81dca70621b80b5dbf7cbd6ec889fbaa0419c4df.diff LOG: [CIR][SPIR-V] Use the program address space for global ctors and dtors (#233927) llvm.global_ctors and llvm.global_dtors entries used addrspace(0) pointers, which asserted on targets with a non-zero program address space Added: Modified: clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp clang/test/CIR/CodeGen/global-ctor-dtor.cpp Removed: ################################################################################ diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp index 88acf1a5ba945..417d629be68b9 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp @@ -4452,7 +4452,9 @@ static void buildCtorDtorList( // Create a global array llvm.global_ctors with element type of // struct { i32, ptr, ptr } - auto ctorPFTy = mlir::LLVM::LLVMPointerType::get(builder.getContext()); + cir::CIRDataLayout cirDataLayout(module); + auto ctorPFTy = mlir::LLVM::LLVMPointerType::get( + builder.getContext(), cirDataLayout.getProgramAddressSpace()); llvm::SmallVector<mlir::Type> ctorStructFields; ctorStructFields.push_back(builder.getI32Type()); ctorStructFields.push_back(ctorPFTy); diff --git a/clang/test/CIR/CodeGen/global-ctor-dtor.cpp b/clang/test/CIR/CodeGen/global-ctor-dtor.cpp index e58261ebf5446..4d51a5154035c 100644 --- a/clang/test/CIR/CodeGen/global-ctor-dtor.cpp +++ b/clang/test/CIR/CodeGen/global-ctor-dtor.cpp @@ -6,6 +6,10 @@ // RUN: FileCheck --check-prefix=LLVM --input-file=%t-cir.ll %s // RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.ll // RUN: FileCheck --check-prefix=OGCG --input-file=%t.ll %s +// RUN: %clang_cc1 -std=c++20 -triple spirv64-amd-amdhsa -fclangir -emit-llvm %s -o - | FileCheck %s --check-prefix=LLVM-AS4 +// RUN: %clang_cc1 -std=c++20 -triple spirv64-amd-amdhsa -emit-llvm %s -o - | FileCheck %s --check-prefix=OGCG-AS4 +// RUN: %clang_cc1 -std=c++20 -triple spirv64-intel -fclangir -emit-llvm %s -o - | FileCheck %s --check-prefix=LLVM-AS9 +// RUN: %clang_cc1 -std=c++20 -triple spirv64-intel -emit-llvm %s -o - | FileCheck %s --check-prefix=OGCG-AS9 extern int bar(); void foo(void) __attribute__((constructor)); @@ -43,3 +47,15 @@ void foo4(void) { // OGCG: @llvm.global_ctors = appending global [2 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_Z3foov, ptr null }, { i32, ptr, ptr } { i32 777, ptr @_Z4foo2v, ptr null }] // OGCG: @llvm.global_dtors = appending global [2 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_Z4foo3v, ptr null }, { i32, ptr, ptr } { i32 789, ptr @_Z4foo4v, ptr null }] + +// LLVM-AS4: @llvm.global_ctors = appending global [2 x { i32, ptr addrspace(4), ptr addrspace(4) }] [{ i32, ptr addrspace(4), ptr addrspace(4) } { i32 65535, ptr addrspace(4) @_Z3foov, ptr addrspace(4) null }, { i32, ptr addrspace(4), ptr addrspace(4) } { i32 777, ptr addrspace(4) @_Z4foo2v, ptr addrspace(4) null }] +// LLVM-AS4: @llvm.global_dtors = appending global [2 x { i32, ptr addrspace(4), ptr addrspace(4) }] [{ i32, ptr addrspace(4), ptr addrspace(4) } { i32 65535, ptr addrspace(4) @_Z4foo3v, ptr addrspace(4) null }, { i32, ptr addrspace(4), ptr addrspace(4) } { i32 789, ptr addrspace(4) @_Z4foo4v, ptr addrspace(4) null }] + +// OGCG-AS4: @llvm.global_ctors = appending addrspace(1) global [2 x { i32, ptr addrspace(4), ptr addrspace(4) }] [{ i32, ptr addrspace(4), ptr addrspace(4) } { i32 65535, ptr addrspace(4) @_Z3foov, ptr addrspace(4) null }, { i32, ptr addrspace(4), ptr addrspace(4) } { i32 777, ptr addrspace(4) @_Z4foo2v, ptr addrspace(4) null }] +// OGCG-AS4: @llvm.global_dtors = appending addrspace(1) global [2 x { i32, ptr addrspace(4), ptr addrspace(4) }] [{ i32, ptr addrspace(4), ptr addrspace(4) } { i32 65535, ptr addrspace(4) @_Z4foo3v, ptr addrspace(4) null }, { i32, ptr addrspace(4), ptr addrspace(4) } { i32 789, ptr addrspace(4) @_Z4foo4v, ptr addrspace(4) null }] + +// LLVM-AS9: @llvm.global_ctors = appending global [2 x { i32, ptr addrspace(9), ptr addrspace(9) }] [{ i32, ptr addrspace(9), ptr addrspace(9) } { i32 65535, ptr addrspace(9) @_Z3foov, ptr addrspace(9) null }, { i32, ptr addrspace(9), ptr addrspace(9) } { i32 777, ptr addrspace(9) @_Z4foo2v, ptr addrspace(9) null }] +// LLVM-AS9: @llvm.global_dtors = appending global [2 x { i32, ptr addrspace(9), ptr addrspace(9) }] [{ i32, ptr addrspace(9), ptr addrspace(9) } { i32 65535, ptr addrspace(9) @_Z4foo3v, ptr addrspace(9) null }, { i32, ptr addrspace(9), ptr addrspace(9) } { i32 789, ptr addrspace(9) @_Z4foo4v, ptr addrspace(9) null }] + +// OGCG-AS9: @llvm.global_ctors = appending addrspace(1) global [2 x { i32, ptr addrspace(9), ptr addrspace(9) }] [{ i32, ptr addrspace(9), ptr addrspace(9) } { i32 65535, ptr addrspace(9) @_Z3foov, ptr addrspace(9) null }, { i32, ptr addrspace(9), ptr addrspace(9) } { i32 777, ptr addrspace(9) @_Z4foo2v, ptr addrspace(9) null }] +// OGCG-AS9: @llvm.global_dtors = appending addrspace(1) global [2 x { i32, ptr addrspace(9), ptr addrspace(9) }] [{ i32, ptr addrspace(9), ptr addrspace(9) } { i32 65535, ptr addrspace(9) @_Z4foo3v, ptr addrspace(9) null }, { i32, ptr addrspace(9), ptr addrspace(9) } { i32 789, ptr addrspace(9) @_Z4foo4v, ptr addrspace(9) null }] _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
