[llvm] Utils: Preserve address space for global_ctors (PR #112532)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 16 05:26:37 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-transforms
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/112532.diff
2 Files Affected:
- (modified) llvm/lib/Transforms/Utils/CtorUtils.cpp (+3-3)
- (added) llvm/test/Transforms/GlobalOpt/ctor-list-preserve-addrspace.ll (+19)
``````````diff
diff --git a/llvm/lib/Transforms/Utils/CtorUtils.cpp b/llvm/lib/Transforms/Utils/CtorUtils.cpp
index 507729bc5ebc06..968446c4eee117 100644
--- a/llvm/lib/Transforms/Utils/CtorUtils.cpp
+++ b/llvm/lib/Transforms/Utils/CtorUtils.cpp
@@ -45,9 +45,9 @@ static void removeGlobalCtors(GlobalVariable *GCL, const BitVector &CtorsToRemov
}
// Create the new global and insert it next to the existing list.
- GlobalVariable *NGV =
- new GlobalVariable(CA->getType(), GCL->isConstant(), GCL->getLinkage(),
- CA, "", GCL->getThreadLocalMode());
+ GlobalVariable *NGV = new GlobalVariable(
+ CA->getType(), GCL->isConstant(), GCL->getLinkage(), CA, "",
+ GCL->getThreadLocalMode(), GCL->getAddressSpace());
GCL->getParent()->insertGlobalVariable(GCL->getIterator(), NGV);
NGV->takeName(GCL);
diff --git a/llvm/test/Transforms/GlobalOpt/ctor-list-preserve-addrspace.ll b/llvm/test/Transforms/GlobalOpt/ctor-list-preserve-addrspace.ll
new file mode 100644
index 00000000000000..3f2f041b90e74d
--- /dev/null
+++ b/llvm/test/Transforms/GlobalOpt/ctor-list-preserve-addrspace.ll
@@ -0,0 +1,19 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 5
+; RUN: opt -S -passes=globalopt < %s | FileCheck %s
+
+; Make sure the address space of global_ctors is preserved
+
+%ini = type { i32, ptr, ptr }
+
+ at llvm.global_ctors = appending addrspace(1) global [1 x %ini] [%ini { i32 65534, ptr @ctor1, ptr null }]
+
+;.
+; CHECK: @llvm.global_ctors = appending addrspace(1) global [0 x %ini] zeroinitializer
+;.
+define void @ctor1() {
+; CHECK-LABEL: define void @ctor1() local_unnamed_addr {
+; CHECK-NEXT: ret void
+;
+ ret void
+}
+
``````````
</details>
https://github.com/llvm/llvm-project/pull/112532
More information about the llvm-commits
mailing list