Skip to content

Commit cb3a6bd

Browse files
committed
[AMDGPULowerBufferFatPointers] Restore zero offset special case
OffAccum will never be nullptr now, instead check for a zero constant.
1 parent dd7540f commit cb3a6bd

File tree

2 files changed

+8
-10
lines changed

2 files changed

+8
-10
lines changed

llvm/lib/Target/AMDGPU/AMDGPULowerBufferFatPointers.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1388,6 +1388,7 @@ PtrParts SplitPtrStructs::visitAtomicCmpXchgInst(AtomicCmpXchgInst &AI) {
13881388
}
13891389

13901390
PtrParts SplitPtrStructs::visitGetElementPtrInst(GetElementPtrInst &GEP) {
1391+
using namespace llvm::PatternMatch;
13911392
Value *Ptr = GEP.getPointerOperand();
13921393
if (!isSplitFatPtr(Ptr->getType()))
13931394
return {nullptr, nullptr};
@@ -1405,7 +1406,7 @@ PtrParts SplitPtrStructs::visitGetElementPtrInst(GetElementPtrInst &GEP) {
14051406
GEP.mutateType(FatPtrTy);
14061407
Value *OffAccum = emitGEPOffset(&IRB, DL, &GEP);
14071408
GEP.mutateType(Ptr->getType());
1408-
if (!OffAccum) { // Constant-zero offset
1409+
if (match(OffAccum, m_Zero())) { // Constant-zero offset
14091410
SplitUsers.insert(&GEP);
14101411
return {Rsrc, Off};
14111412
}
@@ -1415,7 +1416,7 @@ PtrParts SplitPtrStructs::visitGetElementPtrInst(GetElementPtrInst &GEP) {
14151416
HasNonNegativeOff = !CI->isNegative();
14161417
}
14171418
Value *NewOff;
1418-
if (PatternMatch::match(Off, PatternMatch::is_zero())) {
1419+
if (match(Off, m_Zero())) {
14191420
NewOff = OffAccum;
14201421
} else {
14211422
NewOff = IRB.CreateAdd(Off, OffAccum, "",

llvm/test/CodeGen/AMDGPU/lower-buffer-fat-pointers-pointer-ops.ll

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,9 @@ define ptr addrspace(7) @zero_gep(ptr addrspace(7) %ptr) {
9494
; CHECK-SAME: ({ ptr addrspace(8), i32 } [[PTR:%.*]]) #[[ATTR0]] {
9595
; CHECK-NEXT: [[PTR_RSRC:%.*]] = extractvalue { ptr addrspace(8), i32 } [[PTR]], 0
9696
; CHECK-NEXT: [[PTR_OFF:%.*]] = extractvalue { ptr addrspace(8), i32 } [[PTR]], 1
97-
; CHECK-NEXT: [[RET:%.*]] = add i32 [[PTR_OFF]], 0
9897
; CHECK-NEXT: [[TMP1:%.*]] = insertvalue { ptr addrspace(8), i32 } poison, ptr addrspace(8) [[PTR_RSRC]], 0
99-
; CHECK-NEXT: [[TMP2:%.*]] = insertvalue { ptr addrspace(8), i32 } [[TMP1]], i32 [[RET]], 1
100-
; CHECK-NEXT: ret { ptr addrspace(8), i32 } [[TMP2]]
98+
; CHECK-NEXT: [[RET:%.*]] = insertvalue { ptr addrspace(8), i32 } [[TMP1]], i32 [[PTR_OFF]], 1
99+
; CHECK-NEXT: ret { ptr addrspace(8), i32 } [[RET]]
101100
;
102101
%ret = getelementptr i8, ptr addrspace(7) %ptr, i32 0
103102
ret ptr addrspace(7) %ret
@@ -109,10 +108,9 @@ define ptr addrspace(7) @zero_gep_goes_second(ptr addrspace(7) %v0, i32 %arg) {
109108
; CHECK-NEXT: [[V0_RSRC:%.*]] = extractvalue { ptr addrspace(8), i32 } [[V0]], 0
110109
; CHECK-NEXT: [[V0_OFF:%.*]] = extractvalue { ptr addrspace(8), i32 } [[V0]], 1
111110
; CHECK-NEXT: [[V1:%.*]] = add i32 [[V0_OFF]], [[ARG]]
112-
; CHECK-NEXT: [[V2:%.*]] = add i32 [[V1]], 0
113111
; CHECK-NEXT: [[TMP1:%.*]] = insertvalue { ptr addrspace(8), i32 } poison, ptr addrspace(8) [[V0_RSRC]], 0
114-
; CHECK-NEXT: [[TMP2:%.*]] = insertvalue { ptr addrspace(8), i32 } [[TMP1]], i32 [[V2]], 1
115-
; CHECK-NEXT: ret { ptr addrspace(8), i32 } [[TMP2]]
112+
; CHECK-NEXT: [[V2:%.*]] = insertvalue { ptr addrspace(8), i32 } [[TMP1]], i32 [[V1]], 1
113+
; CHECK-NEXT: ret { ptr addrspace(8), i32 } [[V2]]
116114
;
117115
%v1 = getelementptr i8, ptr addrspace(7) %v0, i32 %arg
118116
%v2 = getelementptr i8, ptr addrspace(7) %v1, i32 0
@@ -124,8 +122,7 @@ define ptr addrspace(7) @zero_gep_goes_first(ptr addrspace(7) %v0, i32 %arg) {
124122
; CHECK-SAME: ({ ptr addrspace(8), i32 } [[V0:%.*]], i32 [[ARG:%.*]]) #[[ATTR0]] {
125123
; CHECK-NEXT: [[V0_RSRC:%.*]] = extractvalue { ptr addrspace(8), i32 } [[V0]], 0
126124
; CHECK-NEXT: [[V0_OFF:%.*]] = extractvalue { ptr addrspace(8), i32 } [[V0]], 1
127-
; CHECK-NEXT: [[V1:%.*]] = add i32 [[V0_OFF]], 0
128-
; CHECK-NEXT: [[V2:%.*]] = add i32 [[V1]], [[ARG]]
125+
; CHECK-NEXT: [[V2:%.*]] = add i32 [[V0_OFF]], [[ARG]]
129126
; CHECK-NEXT: [[TMP1:%.*]] = insertvalue { ptr addrspace(8), i32 } poison, ptr addrspace(8) [[V0_RSRC]], 0
130127
; CHECK-NEXT: [[TMP2:%.*]] = insertvalue { ptr addrspace(8), i32 } [[TMP1]], i32 [[V2]], 1
131128
; CHECK-NEXT: ret { ptr addrspace(8), i32 } [[TMP2]]

0 commit comments

Comments
 (0)