Skip to content

Commit 579e9eb

Browse files
committed
Add additional flag tests
1 parent 95e76c1 commit 579e9eb

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed

llvm/test/Transforms/InstCombine/gep-canonicalize-constant-indices.ll

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,3 +125,123 @@ define ptr @multipleUses3(ptr %p) {
125125
%3 = getelementptr inbounds i32, ptr %1, i64 %2
126126
ret ptr %3
127127
}
128+
129+
define ptr @merge_nuw(ptr %p, i64 %a) {
130+
; CHECK-LABEL: @merge_nuw(
131+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr nuw i32, ptr [[P:%.*]], i64 [[A:%.*]]
132+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr nuw i8, ptr [[GEP2]], i64 5
133+
; CHECK-NEXT: ret ptr [[GEP3]]
134+
;
135+
%gep1 = getelementptr nuw i8, ptr %p, i64 1
136+
%gep2 = getelementptr nuw i32, ptr %gep1, i64 %a
137+
%gep3 = getelementptr nuw i32, ptr %gep2, i64 1
138+
ret ptr %gep3
139+
}
140+
141+
define ptr @merge_nuw_inbounds(ptr %p, i64 %a) {
142+
; CHECK-LABEL: @merge_nuw_inbounds(
143+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr inbounds nuw i32, ptr [[P:%.*]], i64 [[A:%.*]]
144+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr inbounds nuw i8, ptr [[GEP2]], i64 5
145+
; CHECK-NEXT: ret ptr [[GEP3]]
146+
;
147+
%gep1 = getelementptr inbounds nuw i8, ptr %p, i64 1
148+
%gep2 = getelementptr inbounds nuw i32, ptr %gep1, i64 %a
149+
%gep3 = getelementptr inbounds nuw i32, ptr %gep2, i64 1
150+
ret ptr %gep3
151+
}
152+
153+
define ptr @merge_nuw_nusw(ptr %p, i64 %a) {
154+
; CHECK-LABEL: @merge_nuw_nusw(
155+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr nusw nuw i32, ptr [[P:%.*]], i64 [[A:%.*]]
156+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr nusw nuw i8, ptr [[GEP2]], i64 5
157+
; CHECK-NEXT: ret ptr [[GEP3]]
158+
;
159+
%gep1 = getelementptr nusw nuw i8, ptr %p, i64 1
160+
%gep2 = getelementptr nusw nuw i32, ptr %gep1, i64 %a
161+
%gep3 = getelementptr nusw nuw i32, ptr %gep2, i64 1
162+
ret ptr %gep3
163+
}
164+
165+
define ptr @merge_missing_nuw1(ptr %p, i64 %a) {
166+
; CHECK-LABEL: @merge_missing_nuw1(
167+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i32, ptr [[P:%.*]], i64 [[A:%.*]]
168+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr i8, ptr [[GEP2]], i64 5
169+
; CHECK-NEXT: ret ptr [[GEP3]]
170+
;
171+
%gep1 = getelementptr i8, ptr %p, i64 1
172+
%gep2 = getelementptr nuw i32, ptr %gep1, i64 %a
173+
%gep3 = getelementptr nuw i32, ptr %gep2, i64 1
174+
ret ptr %gep3
175+
}
176+
177+
define ptr @merge_missing_nuw2(ptr %p, i64 %a) {
178+
; CHECK-LABEL: @merge_missing_nuw2(
179+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i32, ptr [[P:%.*]], i64 [[A:%.*]]
180+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr i8, ptr [[GEP2]], i64 5
181+
; CHECK-NEXT: ret ptr [[GEP3]]
182+
;
183+
%gep1 = getelementptr nuw i8, ptr %p, i64 1
184+
%gep2 = getelementptr i32, ptr %gep1, i64 %a
185+
%gep3 = getelementptr nuw i32, ptr %gep2, i64 1
186+
ret ptr %gep3
187+
}
188+
189+
define ptr @merge_missing_nuw3(ptr %p, i64 %a) {
190+
; CHECK-LABEL: @merge_missing_nuw3(
191+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i32, ptr [[P:%.*]], i64 [[A:%.*]]
192+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr i8, ptr [[GEP2]], i64 5
193+
; CHECK-NEXT: ret ptr [[GEP3]]
194+
;
195+
%gep1 = getelementptr nuw i8, ptr %p, i64 1
196+
%gep2 = getelementptr nuw i32, ptr %gep1, i64 %a
197+
%gep3 = getelementptr i32, ptr %gep2, i64 1
198+
ret ptr %gep3
199+
}
200+
201+
define ptr @merge_nuw_missing_inbounds(ptr %p, i64 %a) {
202+
; CHECK-LABEL: @merge_nuw_missing_inbounds(
203+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr nuw i32, ptr [[P:%.*]], i64 [[A:%.*]]
204+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr nuw i8, ptr [[GEP2]], i64 5
205+
; CHECK-NEXT: ret ptr [[GEP3]]
206+
;
207+
%gep1 = getelementptr nuw i8, ptr %p, i64 1
208+
%gep2 = getelementptr inbounds nuw i32, ptr %gep1, i64 %a
209+
%gep3 = getelementptr inbounds nuw i32, ptr %gep2, i64 1
210+
ret ptr %gep3
211+
}
212+
213+
define ptr @merge_nuw_missing_nusw(ptr %p, i64 %a) {
214+
; CHECK-LABEL: @merge_nuw_missing_nusw(
215+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr nuw i32, ptr [[P:%.*]], i64 [[A:%.*]]
216+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr nuw i8, ptr [[GEP2]], i64 5
217+
; CHECK-NEXT: ret ptr [[GEP3]]
218+
;
219+
%gep1 = getelementptr nusw nuw i8, ptr %p, i64 1
220+
%gep2 = getelementptr nuw i32, ptr %gep1, i64 %a
221+
%gep3 = getelementptr nusw nuw i32, ptr %gep2, i64 1
222+
ret ptr %gep3
223+
}
224+
225+
define ptr @merge_inbounds_missing_nuw(ptr %p, i64 %a) {
226+
; CHECK-LABEL: @merge_inbounds_missing_nuw(
227+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i32, ptr [[P:%.*]], i64 [[A:%.*]]
228+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr i8, ptr [[GEP2]], i64 5
229+
; CHECK-NEXT: ret ptr [[GEP3]]
230+
;
231+
%gep1 = getelementptr inbounds nuw i8, ptr %p, i64 1
232+
%gep2 = getelementptr inbounds i32, ptr %gep1, i64 %a
233+
%gep3 = getelementptr inbounds nuw i32, ptr %gep2, i64 1
234+
ret ptr %gep3
235+
}
236+
237+
define ptr @merge_nusw_missing_nuw(ptr %p, i64 %a) {
238+
; CHECK-LABEL: @merge_nusw_missing_nuw(
239+
; CHECK-NEXT: [[GEP2:%.*]] = getelementptr i32, ptr [[P:%.*]], i64 [[A:%.*]]
240+
; CHECK-NEXT: [[GEP3:%.*]] = getelementptr i8, ptr [[GEP2]], i64 5
241+
; CHECK-NEXT: ret ptr [[GEP3]]
242+
;
243+
%gep1 = getelementptr nusw nuw i8, ptr %p, i64 1
244+
%gep2 = getelementptr nusw i32, ptr %gep1, i64 %a
245+
%gep3 = getelementptr nusw nuw i32, ptr %gep2, i64 1
246+
ret ptr %gep3
247+
}

0 commit comments

Comments
 (0)