[llvm] [ConstantFold] Consider inttoptr, ptrtoaddr is valid cast pair (PR #161087)

Hongyu Chen via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 28 08:40:31 PDT 2025


https://github.com/XChy created https://github.com/llvm/llvm-project/pull/161087

Fixes #157334.

>From 267d813a62c8a84a937afd9ec1de645f5048e999 Mon Sep 17 00:00:00 2001
From: XChy <xxs_chy at outlook.com>
Date: Sun, 28 Sep 2025 23:27:59 +0800
Subject: [PATCH] [ConstantFold] inttoptr, ptrtoaddr is valid cast pair

---
 llvm/lib/IR/Instructions.cpp                       |  3 ++-
 .../InstCombine/constant-expr-datalayout.ll        | 14 ++++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp
index daebf447a2107..fb47768974f2b 100644
--- a/llvm/lib/IR/Instructions.cpp
+++ b/llvm/lib/IR/Instructions.cpp
@@ -2847,6 +2847,7 @@ unsigned CastInst::isEliminableCastPair(
   // FPTRUNC       >       FloatPt      n/a        FloatPt      n/a
   // FPEXT         <       FloatPt      n/a        FloatPt      n/a
   // PTRTOINT     n/a      Pointer      n/a        Integral   Unsigned
+  // PTRTOADDR    n/a      Pointer      n/a        Integral   Unsigned
   // INTTOPTR     n/a      Integral   Unsigned     Pointer      n/a
   // BITCAST       =       FirstClass   n/a       FirstClass    n/a
   // ADDRSPCST    n/a      Pointer      n/a        Pointer      n/a
@@ -2878,7 +2879,7 @@ unsigned CastInst::isEliminableCastPair(
     { 99,99,99, 2, 2,99,99, 8, 2,99,99,99, 4, 0}, // FPExt          |
     {  1, 0, 0,99,99, 0, 0,99,99,99,99, 7, 3, 0}, // PtrToInt       |
     {  1, 0, 0,99,99, 0, 0,99,99,99,99, 0, 3, 0}, // PtrToAddr      |
-    { 99,99,99,99,99,99,99,99,99,11,99,99,15, 0}, // IntToPtr       |
+    { 99,99,99,99,99,99,99,99,99,11, 0,99,15, 0}, // IntToPtr       |
     {  5, 5, 5, 0, 0, 5, 5, 0, 0,16,16, 5, 1,14}, // BitCast        |
     {  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,13,12}, // AddrSpaceCast -+
   };
diff --git a/llvm/test/Transforms/InstCombine/constant-expr-datalayout.ll b/llvm/test/Transforms/InstCombine/constant-expr-datalayout.ll
index 442089eecfcbb..42814cf6c3682 100644
--- a/llvm/test/Transforms/InstCombine/constant-expr-datalayout.ll
+++ b/llvm/test/Transforms/InstCombine/constant-expr-datalayout.ll
@@ -32,3 +32,17 @@ define i64 @OpenFilter(i64 %x) {
   %r = zext i8 %t to i64
   ret i64 %r
 }
+
+define i64 @ptr2addr1() {
+; CHECK-LABEL: @ptr2addr1(
+; CHECK-NEXT:    ret i64 ptrtoaddr (ptr inttoptr (i64 1 to ptr) to i64)
+;
+  ret i64 ptrtoaddr (ptr getelementptr (i8, ptr null, i64 1) to i64)
+}
+
+define i64 @ptr2addr2() {
+; CHECK-LABEL: @ptr2addr2(
+; CHECK-NEXT:    ret i64 ptrtoaddr (ptr inttoptr (i64 123 to ptr) to i64)
+;
+  ret i64 ptrtoaddr (ptr inttoptr (i64 123 to ptr) to i64)
+}



More information about the llvm-commits mailing list