[llvm] 4030b27 - [Loads] Handle ptrtoaddr in isPointerUseReplaceable()

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 9 01:59:27 PDT 2025


Author: Nikita Popov
Date: 2025-10-09T10:59:16+02:00
New Revision: 4030b276f7e59b66caa483ed4cecf05729611c3c

URL: https://github.com/llvm/llvm-project/commit/4030b276f7e59b66caa483ed4cecf05729611c3c
DIFF: https://github.com/llvm/llvm-project/commit/4030b276f7e59b66caa483ed4cecf05729611c3c.diff

LOG: [Loads] Handle ptrtoaddr in isPointerUseReplaceable()

Unlike the ptrtoint case, this is actually correct for ptrtoaddr.

Added: 
    

Modified: 
    llvm/lib/Analysis/Loads.cpp
    llvm/test/Transforms/GVN/assume-equal.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Analysis/Loads.cpp b/llvm/lib/Analysis/Loads.cpp
index 4c2e1feed29cd..54f55b20a93ac 100644
--- a/llvm/lib/Analysis/Loads.cpp
+++ b/llvm/lib/Analysis/Loads.cpp
@@ -812,7 +812,9 @@ static bool isPointerUseReplacable(const Use &U) {
     auto *User = Worklist.pop_back_val();
     if (!Visited.insert(User).second)
       continue;
-    if (isa<ICmpInst, PtrToIntInst>(User))
+    // FIXME: The PtrToIntInst case here is not strictly correct, as it
+    // changes which provenance is exposed.
+    if (isa<ICmpInst, PtrToIntInst, PtrToAddrInst>(User))
       continue;
     if (isa<PHINode, SelectInst>(User))
       Worklist.append(User->user_begin(), User->user_end());

diff  --git a/llvm/test/Transforms/GVN/assume-equal.ll b/llvm/test/Transforms/GVN/assume-equal.ll
index 8a585ef9d5cd1..bbbc5c58584a6 100644
--- a/llvm/test/Transforms/GVN/assume-equal.ll
+++ b/llvm/test/Transforms/GVN/assume-equal.ll
@@ -393,7 +393,7 @@ define i64 @assume_ptr_eq_
diff erent_prov_does_not_matter_ptrtoaddr(ptr %p, ptr %
 ; CHECK-SAME: ptr [[P:%.*]], ptr [[P2:%.*]]) {
 ; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[P]], [[P2]]
 ; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])
-; CHECK-NEXT:    [[INT:%.*]] = ptrtoaddr ptr [[P2]] to i64
+; CHECK-NEXT:    [[INT:%.*]] = ptrtoaddr ptr [[P]] to i64
 ; CHECK-NEXT:    ret i64 [[INT]]
 ;
   %cmp = icmp eq ptr %p, %p2


        


More information about the llvm-commits mailing list