Skip to content

Commit d199ff1

Browse files
authored
[InferAddressSpaces] collect flat address expression from return value (#70610)
If function return value's type is pointer, we can try to collect flat address expression from it. This PR also fixes noop_ptrint_pair_ce2 in noop-ptrint-pair.ll in #70611
1 parent fc7198b commit d199ff1

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

llvm/lib/Transforms/Scalar/InferAddressSpaces.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,10 @@ InferAddressSpacesImpl::collectFlatAddressExpressions(Function &F) const {
523523
} else if (auto *I2P = dyn_cast<IntToPtrInst>(&I)) {
524524
if (isNoopPtrIntCastPair(cast<Operator>(I2P), *DL, TTI))
525525
PushPtrOperand(cast<Operator>(I2P->getOperand(0))->getOperand(0));
526+
} else if (auto *RI = dyn_cast<ReturnInst>(&I)) {
527+
if (auto *RV = RI->getReturnValue();
528+
RV && RV->getType()->isPtrOrPtrVectorTy())
529+
PushPtrOperand(RV);
526530
}
527531
}
528532

llvm/test/Transforms/InferAddressSpaces/AMDGPU/noop-ptrint-pair.ll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ define ptr @noop_ptrint_pair_ce2() {
6969
ret ptr inttoptr (i64 ptrtoint (ptr addrspace(1) @g to i64) to ptr)
7070
}
7171

72+
; COMMON-LABEL: @noop_ptrint_pair_ce2_vec(
73+
; AMDGCN-NEXT: ret <2 x ptr> <ptr addrspacecast (ptr addrspace(1) @g to ptr), ptr inttoptr (i64 ptrtoint (ptr addrspace(3) @l to i64) to ptr)>
74+
; NOTTI-NEXT: ret <2 x ptr> <ptr inttoptr (i64 ptrtoint (ptr addrspace(1) @g to i64) to ptr), ptr inttoptr (i64 ptrtoint (ptr addrspace(3) @l to i64) to ptr)>
75+
define <2 x ptr> @noop_ptrint_pair_ce2_vec() {
76+
ret <2 x ptr> <ptr inttoptr (i64 ptrtoint (ptr addrspace(1) @g to i64) to ptr), ptr inttoptr (i64 ptrtoint (ptr addrspace(3) @l to i64) to ptr)>
77+
}
78+
7279
; COMMON-LABEL: @noop_ptrint_pair_ce3(
7380
; AMDGCN-NEXT: %i = inttoptr i64 ptrtoint (ptr addrspace(1) @g to i64) to ptr
7481
; AMDGCN-NEXT: ret void

llvm/test/Transforms/InferAddressSpaces/AMDGPU/select.ll

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
; Instcombine pulls the addrspacecast out of the select, make sure
44
; this doesn't do something insane on non-canonical IR.
55

6-
; CHECK-LABEL: @return_select_group_flat(
7-
; CHECK-NEXT: %cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
8-
; CHECK-NEXT: %cast1 = addrspacecast ptr addrspace(3) %group.ptr.1 to ptr
9-
; CHECK-NEXT: %select = select i1 %c, ptr %cast0, ptr %cast1
10-
; CHECK-NEXT: ret ptr %select
6+
; CHECK-LABEL: define ptr @return_select_group_flat(
7+
; CHECK-SAME: i1 [[C:%.*]], ptr addrspace(3) [[GROUP_PTR_0:%.*]], ptr addrspace(3) [[GROUP_PTR_1:%.*]]) #[[ATTR0:[0-9]+]] {
8+
; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[C]], ptr addrspace(3) [[GROUP_PTR_0]], ptr addrspace(3) [[GROUP_PTR_1]]
9+
; CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(3) [[SELECT]] to ptr
10+
; CHECK-NEXT: ret ptr [[TMP1]]
1111
define ptr @return_select_group_flat(i1 %c, ptr addrspace(3) %group.ptr.0, ptr addrspace(3) %group.ptr.1) #0 {
1212
%cast0 = addrspacecast ptr addrspace(3) %group.ptr.0 to ptr
1313
%cast1 = addrspacecast ptr addrspace(3) %group.ptr.1 to ptr

0 commit comments

Comments
 (0)