Skip to content

Commit 5841319

Browse files
committed
[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.
1 parent 9abd6f2 commit 5841319

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

llvm/lib/Analysis/ConstantFolding.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ bool llvm::IsConstantOffsetFromGlobal(Constant *C, GlobalValue *&GV,
329329

330330
// Look through ptr->int and ptr->ptr casts.
331331
if (CE->getOpcode() == Instruction::PtrToInt ||
332+
CE->getOpcode() == Instruction::PtrToAddr ||
332333
CE->getOpcode() == Instruction::BitCast)
333334
return IsConstantOffsetFromGlobal(CE->getOperand(0), GV, Offset, DL,
334335
DSOEquiv);

llvm/test/Transforms/InstCombine/ptrtoaddr.ll

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,24 @@ define ptr @inttoptr_of_ptrtoaddr() {
109109
;
110110
ret ptr inttoptr (i64 ptrtoaddr (ptr @g to i64) to ptr)
111111
}
112+
113+
define i64 @ptrtoaddr_sub_consts_unrelated() {
114+
; CHECK-LABEL: define i64 @ptrtoaddr_sub_consts_unrelated() {
115+
; CHECK-NEXT: ret i64 sub (i64 ptrtoaddr (ptr @g to i64), i64 ptrtoaddr (ptr @g2 to i64))
116+
;
117+
ret i64 sub (i64 ptrtoaddr (ptr @g to i64), i64 ptrtoaddr (ptr @g2 to i64))
118+
}
119+
120+
define i64 @ptrtoaddr_sub_consts_offset() {
121+
; CHECK-LABEL: define i64 @ptrtoaddr_sub_consts_offset() {
122+
; CHECK-NEXT: ret i64 42
123+
;
124+
ret i64 sub (i64 ptrtoaddr (ptr getelementptr (i8, ptr @g, i64 42) to i64), i64 ptrtoaddr (ptr @g to i64))
125+
}
126+
127+
define i32 @ptrtoaddr_sub_consts_offset_addrsize() {
128+
; CHECK-LABEL: define i32 @ptrtoaddr_sub_consts_offset_addrsize() {
129+
; CHECK-NEXT: ret i32 42
130+
;
131+
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))
132+
}

0 commit comments

Comments
 (0)