[llvm] 2ec549a - [GVNSink] Add support for ptrtoaddr

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 20 07:46:18 PDT 2025


Author: Nikita Popov
Date: 2025-10-20T16:46:08+02:00
New Revision: 2ec549ad119a9c9979fbaa1af2acf3726028bdea

URL: https://github.com/llvm/llvm-project/commit/2ec549ad119a9c9979fbaa1af2acf3726028bdea
DIFF: https://github.com/llvm/llvm-project/commit/2ec549ad119a9c9979fbaa1af2acf3726028bdea.diff

LOG: [GVNSink] Add support for ptrtoaddr

Added: 
    llvm/test/Transforms/GVNSink/ptrtoaddr.ll

Modified: 
    llvm/lib/Transforms/Scalar/GVNSink.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/GVNSink.cpp b/llvm/lib/Transforms/Scalar/GVNSink.cpp
index b9534def3c738..a06f8325c90bf 100644
--- a/llvm/lib/Transforms/Scalar/GVNSink.cpp
+++ b/llvm/lib/Transforms/Scalar/GVNSink.cpp
@@ -430,6 +430,7 @@ class ValueTable {
     case Instruction::FPTrunc:
     case Instruction::FPExt:
     case Instruction::PtrToInt:
+    case Instruction::PtrToAddr:
     case Instruction::IntToPtr:
     case Instruction::BitCast:
     case Instruction::AddrSpaceCast:

diff  --git a/llvm/test/Transforms/GVNSink/ptrtoaddr.ll b/llvm/test/Transforms/GVNSink/ptrtoaddr.ll
new file mode 100644
index 0000000000000..3a9d16ebbcf6c
--- /dev/null
+++ b/llvm/test/Transforms/GVNSink/ptrtoaddr.ll
@@ -0,0 +1,30 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -S -passes=gvn-sink < %s | FileCheck %s
+
+define i64 @test(i1 %c, ptr %p, ptr %p2) {
+; CHECK-LABEL: define i64 @test(
+; CHECK-SAME: i1 [[C:%.*]], ptr [[P:%.*]], ptr [[P2:%.*]]) {
+; CHECK-NEXT:    br i1 [[C]], label %[[IF:.*]], label %[[ELSE:.*]]
+; CHECK:       [[IF]]:
+; CHECK-NEXT:    br label %[[JOIN:.*]]
+; CHECK:       [[ELSE]]:
+; CHECK-NEXT:    br label %[[JOIN]]
+; CHECK:       [[JOIN]]:
+; CHECK-NEXT:    [[P2_SINK:%.*]] = phi ptr [ [[P2]], %[[ELSE]] ], [ [[P]], %[[IF]] ]
+; CHECK-NEXT:    [[PHI:%.*]] = ptrtoaddr ptr [[P2_SINK]] to i64
+; CHECK-NEXT:    ret i64 [[PHI]]
+;
+  br i1 %c, label %if, label %else
+
+if:
+  %p.addr = ptrtoaddr ptr %p to i64
+  br label %join
+
+else:
+  %p2.addr = ptrtoaddr ptr %p2 to i64
+  br label %join
+
+join:
+  %phi = phi i64 [ %p.addr, %if ], [ %p2.addr, %else ]
+  ret i64 %phi
+}


        


More information about the llvm-commits mailing list