llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Arseniy Obolenskiy (aobolensk) <details> <summary>Changes</summary> llvm.global_ctors and llvm.global_dtors entries used addrspace(0) pointers, which asserted on targets with a non-zero program address space --- Full diff: https://github.com/llvm/llvm-project/pull/233927.diff 2 Files Affected: - (modified) clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp (+3-1) - (modified) clang/test/CIR/CodeGen/global-ctor-dtor.cpp (+16) ``````````diff diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp index ac005a4e838d1..a0761bd360f68 100644 --- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp +++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp @@ -4409,7 +4409,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 }] `````````` </details> https://github.com/llvm/llvm-project/pull/233927 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
