[llvm] 14a259f - GlobalOpt: Use the correct address space when creating a "*.init" global. (#118562)

via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 3 17:01:22 PST 2024


Author: Owen Anderson
Date: 2024-12-04T14:01:16+13:00
New Revision: 14a259f85b6cbe6827677d94990c8803e31c847d

URL: https://github.com/llvm/llvm-project/commit/14a259f85b6cbe6827677d94990c8803e31c847d
DIFF: https://github.com/llvm/llvm-project/commit/14a259f85b6cbe6827677d94990c8803e31c847d.diff

LOG: GlobalOpt: Use the correct address space when creating a "*.init" global. (#118562)

Added: 
    llvm/test/Transforms/GlobalOpt/malloc-promote-addrspace.ll

Modified: 
    llvm/lib/Transforms/IPO/GlobalOpt.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/IPO/GlobalOpt.cpp b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
index 3381b5f77683b5..16a80e9ebbeaab 100644
--- a/llvm/lib/Transforms/IPO/GlobalOpt.cpp
+++ b/llvm/lib/Transforms/IPO/GlobalOpt.cpp
@@ -946,11 +946,10 @@ OptimizeGlobalAddressOfAllocation(GlobalVariable *GV, CallInst *CI,
 
   // If there is a comparison against null, we will insert a global bool to
   // keep track of whether the global was initialized yet or not.
-  GlobalVariable *InitBool =
-    new GlobalVariable(Type::getInt1Ty(GV->getContext()), false,
-                       GlobalValue::InternalLinkage,
-                       ConstantInt::getFalse(GV->getContext()),
-                       GV->getName()+".init", GV->getThreadLocalMode());
+  GlobalVariable *InitBool = new GlobalVariable(
+      Type::getInt1Ty(GV->getContext()), false, GlobalValue::InternalLinkage,
+      ConstantInt::getFalse(GV->getContext()), GV->getName() + ".init",
+      GV->getThreadLocalMode(), GV->getAddressSpace());
   bool InitBoolUsed = false;
 
   // Loop over all instruction uses of GV, processing them in turn.

diff  --git a/llvm/test/Transforms/GlobalOpt/malloc-promote-addrspace.ll b/llvm/test/Transforms/GlobalOpt/malloc-promote-addrspace.ll
new file mode 100644
index 00000000000000..bd0957150748f9
--- /dev/null
+++ b/llvm/test/Transforms/GlobalOpt/malloc-promote-addrspace.ll
@@ -0,0 +1,69 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-globals
+; RUN: opt -S -passes=globalopt -o - < %s | FileCheck %s
+
+ at g = internal addrspace(200) global ptr null, align 8
+
+;.
+; CHECK: @g.init = internal unnamed_addr addrspace(200) global i1 false
+;.
+define internal i32 @f1() {
+; CHECK-LABEL: define {{[^@]+}}@f1() unnamed_addr {
+; CHECK-NEXT:  bb:
+; CHECK-NEXT:    [[G_INIT_VAL:%.*]] = load i1, ptr addrspace(200) @g.init, align 1
+; CHECK-NEXT:    call fastcc void @f2()
+; CHECK-NEXT:    [[NOTINIT:%.*]] = xor i1 [[G_INIT_VAL]], true
+; CHECK-NEXT:    br i1 [[NOTINIT]], label [[BB2:%.*]], label [[BB3:%.*]]
+; CHECK:       bb2:
+; CHECK-NEXT:    br label [[BB4:%.*]]
+; CHECK:       bb3:
+; CHECK-NEXT:    br label [[BB4]]
+; CHECK:       bb4:
+; CHECK-NEXT:    [[I5:%.*]] = phi i32 [ -1, [[BB2]] ], [ 1, [[BB3]] ]
+; CHECK-NEXT:    ret i32 [[I5]]
+;
+bb:
+  %i = load ptr addrspace(200), ptr addrspace(200) @g, align 8
+  call void @f2()
+  %i1 = icmp eq ptr addrspace(200) %i, null
+  br i1 %i1, label %bb2, label %bb3
+
+bb2:                                              ; preds = %bb
+  br label %bb4
+
+bb3:                                              ; preds = %bb
+  br label %bb4
+
+bb4:                                              ; preds = %bb3, %bb2
+  %i5 = phi i32 [ -1, %bb2 ], [ 1, %bb3 ]
+  ret i32 %i5
+}
+
+define internal void @f2() {
+; CHECK-LABEL: define {{[^@]+}}@f2() unnamed_addr {
+; CHECK-NEXT:  bb:
+; CHECK-NEXT:    store i1 true, ptr addrspace(200) @g.init, align 1
+; CHECK-NEXT:    ret void
+;
+bb:
+  %i = call noalias ptr @malloc(i64 4)
+  store ptr %i, ptr addrspace(200) @g, align 8
+  ret void
+}
+
+define dso_local i32 @main() {
+; CHECK-LABEL: define {{[^@]+}}@main() local_unnamed_addr {
+; CHECK-NEXT:  bb:
+; CHECK-NEXT:    store i1 false, ptr addrspace(200) @g.init, align 1
+; CHECK-NEXT:    [[I:%.*]] = call fastcc i32 @f1()
+; CHECK-NEXT:    ret i32 [[I]]
+;
+bb:
+  store ptr null, ptr addrspace(200) @g, align 8
+  %i = call i32 @f1()
+  ret i32 %i
+}
+
+; Function Attrs: allockind("alloc,uninitialized") allocsize(0)
+declare dso_local noalias ptr @malloc(i64) #0
+
+attributes #0 = { allockind("alloc,uninitialized") allocsize(0) }


        


More information about the llvm-commits mailing list