[PATCH] D149289: GlobalOpt: Drop code to handle typed pointers

Matt Arsenault via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 26 14:19:36 PDT 2023


arsenm updated this revision to Diff 517315.
arsenm added a comment.

Reproduces without other passes now for some reason


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D149289/new/

https://reviews.llvm.org/D149289

Files:
  llvm/lib/Transforms/IPO/GlobalOpt.cpp
  llvm/test/Transforms/GlobalOpt/issue62384.ll


Index: llvm/test/Transforms/GlobalOpt/issue62384.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/GlobalOpt/issue62384.ll
@@ -0,0 +1,80 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
+; RUN: opt -S -p=globalopt %s | FileCheck %s
+
+
+ at llvm.used = appending global [1 x ptr] [ptr @ctor]
+ at gv0 = internal addrspace(1) global ptr null
+ at gv1 = internal addrspace(1) global ptr addrspace(3) null
+ at gv2 = internal addrspace(1) global ptr addrspace(1) null
+ at gv3 = internal addrspace(1) global ptr addrspace(1) null
+
+define internal void @ctor() {
+; CHECK-LABEL: define internal void @ctor() {
+; CHECK-NEXT:    tail call fastcc void @init0(ptr addrspacecast (ptr addrspace(1) null to ptr))
+; CHECK-NEXT:    tail call fastcc void @init1(ptr addrspacecast (ptr addrspace(3) null to ptr))
+; CHECK-NEXT:    tail call fastcc void @init2(ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)))
+; CHECK-NEXT:    tail call fastcc void @init3(ptr addrspace(1) addrspacecast (ptr addrspace(2) null to ptr addrspace(1)))
+; CHECK-NEXT:    ret void
+;
+  tail call void @init0(ptr addrspacecast (ptr addrspace(1) null to ptr))
+  tail call void @init1(ptr addrspacecast (ptr addrspace(3) null to ptr))
+  tail call void @init2(ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)))
+  tail call void @init3(ptr addrspace(1) addrspacecast (ptr addrspace(2) null to ptr addrspace(1)))
+  ret void
+}
+
+define internal void @init0(ptr %T) {
+; CHECK-LABEL: define internal fastcc void @init0
+; CHECK-SAME: (ptr [[T:%.*]]) unnamed_addr {
+; CHECK-NEXT:    [[LD:%.*]] = load ptr, ptr addrspace(1) @gv0, align 8
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[LD]], null
+; CHECK-NEXT:    store ptr addrspacecast (ptr addrspace(1) null to ptr), ptr addrspace(1) @gv0, align 8
+; CHECK-NEXT:    ret void
+;
+  %ld = load ptr, ptr addrspace(1) @gv0, align 8
+  %cmp = icmp eq ptr %ld, null
+  store ptr addrspacecast (ptr addrspace(1) null to ptr), ptr addrspace(1) @gv0, align 8
+  ret void
+}
+
+define internal void @init1(ptr %T) {
+; CHECK-LABEL: define internal fastcc void @init1
+; CHECK-SAME: (ptr [[T:%.*]]) unnamed_addr {
+; CHECK-NEXT:    [[LD:%.*]] = load ptr addrspace(3), ptr addrspace(1) @gv1, align 4
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(3) [[LD]], null
+; CHECK-NEXT:    store ptr addrspacecast (ptr addrspace(3) null to ptr), ptr addrspace(1) @gv1, align 8
+; CHECK-NEXT:    ret void
+;
+  %ld = load ptr addrspace(3), ptr addrspace(1) @gv1, align 4
+  %cmp = icmp eq ptr addrspace(3) %ld, null
+  store ptr addrspacecast (ptr addrspace(3) null to ptr), ptr addrspace(1) @gv1, align 8
+  ret void
+}
+
+define internal void @init2(ptr addrspace(1) %T) {
+; CHECK-LABEL: define internal fastcc void @init2
+; CHECK-SAME: (ptr addrspace(1) [[T:%.*]]) unnamed_addr {
+; CHECK-NEXT:    [[LD:%.*]] = load ptr addrspace(1), ptr addrspace(1) @gv2, align 4
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(1) [[LD]], null
+; CHECK-NEXT:    store ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)), ptr addrspace(1) @gv2, align 8
+; CHECK-NEXT:    ret void
+;
+  %ld = load ptr addrspace(1), ptr addrspace(1) @gv2, align 4
+  %cmp = icmp eq ptr addrspace(1) %ld, null
+  store ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)), ptr addrspace(1) @gv2, align 8
+  ret void
+}
+
+define internal void @init3(ptr addrspace(1) %T) {
+; CHECK-LABEL: define internal fastcc void @init3
+; CHECK-SAME: (ptr addrspace(1) [[T:%.*]]) unnamed_addr {
+; CHECK-NEXT:    [[LD:%.*]] = load ptr addrspace(1), ptr addrspace(1) @gv3, align 4
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(1) [[LD]], null
+; CHECK-NEXT:    store ptr addrspace(1) addrspacecast (ptr addrspace(2) null to ptr addrspace(1)), ptr addrspace(1) @gv3, align 8
+; CHECK-NEXT:    ret void
+;
+  %ld = load ptr addrspace(1), ptr addrspace(1) @gv3, align 4
+  %cmp = icmp eq ptr addrspace(1) %ld, null
+  store ptr addrspace(1) addrspacecast (ptr addrspace(2) null to ptr addrspace(1)), ptr addrspace(1) @gv3, align 8
+  ret void
+}
Index: llvm/lib/Transforms/IPO/GlobalOpt.cpp
===================================================================
--- llvm/lib/Transforms/IPO/GlobalOpt.cpp
+++ llvm/lib/Transforms/IPO/GlobalOpt.cpp
@@ -1145,9 +1145,6 @@
           nullptr /* F */,
           GV->getInitializer()->getType()->getPointerAddressSpace())) {
     if (Constant *SOVC = dyn_cast<Constant>(StoredOnceVal)) {
-      if (GV->getInitializer()->getType() != SOVC->getType())
-        SOVC = ConstantExpr::getBitCast(SOVC, GV->getInitializer()->getType());
-
       // Optimize away any trapping uses of the loaded value.
       if (OptimizeAwayTrappingUsesOfLoads(GV, SOVC, DL, GetTLI))
         return true;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D149289.517315.patch
Type: text/x-patch
Size: 4837 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230426/bdc8b7ff/attachment.bin>


More information about the llvm-commits mailing list