[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