[llvm] [GlobalOpt] Do not fold away addrspacecasts which may be runtime operations (PR #153753)
Owen Anderson via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 15 03:20:42 PDT 2025
================
@@ -0,0 +1,31 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
+; RUN: opt -passes=globalopt < %s -S | FileCheck %s
+
+; Test that we do not fold away addresscasts when optimizing once-stored
+; globals, as these may be runtime operations.
+
+%T = type { ptr }
+
+ at 0 = internal global ptr null
+ at 1 = internal addrspace(1) global i32 0
+
+;.
+; CHECK: @[[GLOB0:[0-9]+]] = internal unnamed_addr global ptr null
+; CHECK: @[[GLOB1:[0-9]+]] = internal addrspace(1) global i32 0
+;.
+define void @a() {
+; CHECK-LABEL: @a(
+; CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(1) @[[GLOB1]] to ptr
+; CHECK-NEXT: store ptr [[TMP1]], ptr @[[GLOB0]], align 8
+; CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr @[[GLOB0]], align 8
+; CHECK-NEXT: [[TMP3:%.*]] = load atomic i64, ptr [[TMP2]] acquire, align 8
+; CHECK-NEXT: ret void
+;
+ %1 = addrspacecast ptr addrspace(1) @1 to ptr
+ store ptr %1, ptr @0, align 8
+ %2 = load ptr, ptr @0, align 8
+ %3 = load atomic i64, ptr %2 acquire, align 8
+ ret void
+}
+
+declare ptr @_Znwm(i64)
----------------
resistor wrote:
Done
https://github.com/llvm/llvm-project/pull/153753
More information about the llvm-commits
mailing list