[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