[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