[llvm] 5841319 - [ConstantFolding] Support ptrtoadd in IsConstantOffsetFromGlobal()
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 9 05:59:35 PDT 2025
Author: Nikita Popov
Date: 2025-10-09T14:59:23+02:00
New Revision: 5841319aca0f2596cc00ab83d54ec07c9b70da3c
URL: https://github.com/llvm/llvm-project/commit/5841319aca0f2596cc00ab83d54ec07c9b70da3c
DIFF: https://github.com/llvm/llvm-project/commit/5841319aca0f2596cc00ab83d54ec07c9b70da3c.diff
LOG: [ConstantFolding] Support ptrtoadd in IsConstantOffsetFromGlobal()
Handle ptrtoaddr the same way as ptrtoint. This code is already
working on the index size (= address size) of the pointer only.
Added:
Modified:
llvm/lib/Analysis/ConstantFolding.cpp
llvm/test/Transforms/InstCombine/ptrtoaddr.ll
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp
index 31546e628b226..45c889cef8e2c 100755
--- a/llvm/lib/Analysis/ConstantFolding.cpp
+++ b/llvm/lib/Analysis/ConstantFolding.cpp
@@ -329,6 +329,7 @@ bool llvm::IsConstantOffsetFromGlobal(Constant *C, GlobalValue *&GV,
// Look through ptr->int and ptr->ptr casts.
if (CE->getOpcode() == Instruction::PtrToInt ||
+ CE->getOpcode() == Instruction::PtrToAddr ||
CE->getOpcode() == Instruction::BitCast)
return IsConstantOffsetFromGlobal(CE->getOperand(0), GV, Offset, DL,
DSOEquiv);
diff --git a/llvm/test/Transforms/InstCombine/ptrtoaddr.ll b/llvm/test/Transforms/InstCombine/ptrtoaddr.ll
index 49b9b7e198dfa..5211fbd8b897a 100644
--- a/llvm/test/Transforms/InstCombine/ptrtoaddr.ll
+++ b/llvm/test/Transforms/InstCombine/ptrtoaddr.ll
@@ -109,3 +109,24 @@ define ptr @inttoptr_of_ptrtoaddr() {
;
ret ptr inttoptr (i64 ptrtoaddr (ptr @g to i64) to ptr)
}
+
+define i64 @ptrtoaddr_sub_consts_unrelated() {
+; CHECK-LABEL: define i64 @ptrtoaddr_sub_consts_unrelated() {
+; CHECK-NEXT: ret i64 sub (i64 ptrtoaddr (ptr @g to i64), i64 ptrtoaddr (ptr @g2 to i64))
+;
+ ret i64 sub (i64 ptrtoaddr (ptr @g to i64), i64 ptrtoaddr (ptr @g2 to i64))
+}
+
+define i64 @ptrtoaddr_sub_consts_offset() {
+; CHECK-LABEL: define i64 @ptrtoaddr_sub_consts_offset() {
+; CHECK-NEXT: ret i64 42
+;
+ ret i64 sub (i64 ptrtoaddr (ptr getelementptr (i8, ptr @g, i64 42) to i64), i64 ptrtoaddr (ptr @g to i64))
+}
+
+define i32 @ptrtoaddr_sub_consts_offset_addrsize() {
+; CHECK-LABEL: define i32 @ptrtoaddr_sub_consts_offset_addrsize() {
+; CHECK-NEXT: ret i32 42
+;
+ ret i32 sub (i32 ptrtoaddr (ptr addrspace(1) getelementptr (i8, ptr addrspace(1) @g.as1, i32 42) to i32), i32 ptrtoaddr (ptr addrspace(1) @g.as1 to i32))
+}
More information about the llvm-commits
mailing list