Skip to content

Commit b371d0b

Browse files
committed
Allow ptr source type
Change-Id: I66bdfcfd7ce3d53c28b4439bd8ebd65905574560
1 parent a8ee263 commit b371d0b

File tree

2 files changed

+84
-9
lines changed

2 files changed

+84
-9
lines changed

llvm/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -985,12 +985,6 @@ bool SeparateConstOffsetFromGEP::reorderGEP(GetElementPtrInst *GEP,
985985
if (PtrGEPType->isAggregateType() || PtrGEP->getNumIndices() != 1)
986986
return false;
987987

988-
bool GEPIsPtr = GEPType->getScalarType()->isPtrOrPtrVectorTy();
989-
bool PtrGEPIsPtr = PtrGEPType->getScalarType()->isPtrOrPtrVectorTy();
990-
991-
if (GEPIsPtr != PtrGEPIsPtr)
992-
return false;
993-
994988
bool NestedNeedsExtraction;
995989
int64_t NestedByteOffset =
996990
accumulateByteOffset(PtrGEP, NestedNeedsExtraction);

llvm/test/Transforms/SeparateConstOffsetFromGEP/AMDGPU/reorder-gep-inbounds.ll

Lines changed: 84 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ define void @inboundsPossiblyNegative(ptr %in.ptr, i64 %in.idx1) {
66
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0:[0-9]+]] {
77
; CHECK-NEXT: entry:
88
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1]]
9-
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i32 1
9+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i64 1
1010
; CHECK-NEXT: ret void
1111
;
1212
entry:
@@ -145,7 +145,7 @@ entry:
145145
}
146146

147147
define void @vectorType1(ptr %in.ptr, i64 %in.idx1) {
148-
; CHECK-LABEL: define void @badVectorType(
148+
; CHECK-LABEL: define void @vectorType1(
149149
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
150150
; CHECK-NEXT: entry:
151151
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
@@ -161,7 +161,7 @@ entry:
161161
}
162162

163163
define void @vectorType2(ptr %in.ptr, i64 %in.idx1) {
164-
; CHECK-LABEL: define void @badVectorType2(
164+
; CHECK-LABEL: define void @vectorType2(
165165
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
166166
; CHECK-NEXT: entry:
167167
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
@@ -176,6 +176,87 @@ entry:
176176
ret void
177177
}
178178

179+
define void @vectorType3(ptr %in.ptr, i64 %in.idx1) {
180+
; CHECK-LABEL: define void @vectorType3(
181+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
182+
; CHECK-NEXT: entry:
183+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
184+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds ptr, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
185+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x ptr>, ptr [[TMP0]], i32 1
186+
; CHECK-NEXT: ret void
187+
;
188+
entry:
189+
%in.idx1.nneg = and i64 %in.idx1, 2147483647
190+
%const1 = getelementptr inbounds <4 x ptr>, ptr %in.ptr, i32 1
191+
%idx1 = getelementptr inbounds ptr, ptr %const1, i64 %in.idx1.nneg
192+
ret void
193+
}
194+
195+
define void @vectorType4(ptr %in.ptr, i64 %in.idx1) {
196+
; CHECK-LABEL: define void @vectorType4(
197+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
198+
; CHECK-NEXT: entry:
199+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
200+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds <8 x ptr addrspace(1)>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
201+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x ptr>, ptr [[TMP0]], i32 3
202+
; CHECK-NEXT: ret void
203+
;
204+
entry:
205+
%in.idx1.nneg = and i64 %in.idx1, 2147483647
206+
%const1 = getelementptr inbounds <4 x ptr>, ptr %in.ptr, i32 3
207+
%idx1 = getelementptr inbounds <8 x ptr addrspace(1)>, ptr %const1, i64 %in.idx1.nneg
208+
ret void
209+
}
210+
211+
212+
define void @ptrType(ptr %in.ptr, i64 %in.idx1) {
213+
; CHECK-LABEL: define void @ptrType(
214+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
215+
; CHECK-NEXT: entry:
216+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
217+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds ptr, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
218+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds <4 x ptr>, ptr [[TMP0]], i32 1
219+
; CHECK-NEXT: ret void
220+
;
221+
entry:
222+
%in.idx1.nneg = and i64 %in.idx1, 2147483647
223+
%const1 = getelementptr inbounds <4 x ptr>, ptr %in.ptr, i32 1
224+
%idx1 = getelementptr inbounds ptr, ptr %const1, i64 %in.idx1.nneg
225+
ret void
226+
}
227+
228+
define void @ptrType2(ptr %in.ptr, i64 %in.idx1) {
229+
; CHECK-LABEL: define void @ptrType2(
230+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
231+
; CHECK-NEXT: entry:
232+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
233+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i64, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
234+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds ptr addrspace(3), ptr [[TMP0]], i32 3
235+
; CHECK-NEXT: ret void
236+
;
237+
entry:
238+
%in.idx1.nneg = and i64 %in.idx1, 2147483647
239+
%const1 = getelementptr inbounds ptr addrspace(3), ptr %in.ptr, i32 3
240+
%idx1 = getelementptr inbounds i64, ptr %const1, i64 %in.idx1.nneg
241+
ret void
242+
}
243+
244+
define void @ptrType3(ptr %in.ptr, i64 %in.idx1) {
245+
; CHECK-LABEL: define void @ptrType3(
246+
; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {
247+
; CHECK-NEXT: entry:
248+
; CHECK-NEXT: [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647
249+
; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds i16, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]
250+
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr inbounds ptr addrspace(7), ptr [[TMP0]], i32 3
251+
; CHECK-NEXT: ret void
252+
;
253+
entry:
254+
%in.idx1.nneg = and i64 %in.idx1, 2147483647
255+
%const1 = getelementptr inbounds ptr addrspace(7), ptr %in.ptr, i32 3
256+
%idx1 = getelementptr inbounds i16, ptr %const1, i64 %in.idx1.nneg
257+
ret void
258+
}
259+
179260
define void @addrspace1(ptr addrspace(1) %in.ptr, i64 %in.idx1) {
180261
; CHECK-LABEL: define void @addrspace1(
181262
; CHECK-SAME: ptr addrspace(1) [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {

0 commit comments

Comments
 (0)