Skip to content

Commit 3fcb968

Browse files
committed
[InstSimplify] Add tests for comparison with zero-sized allocs (NFC)
1 parent a41922a commit 3fcb968

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

llvm/test/Transforms/InstSimplify/cmp-alloca-offsets.ll

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,4 +230,96 @@ define i1 @mixed_alloca_size4() {
230230
ret i1 %res
231231
}
232232

233+
define i1 @zst_alloca_start() {
234+
; CHECK-LABEL: @zst_alloca_start(
235+
; CHECK-NEXT: [[A:%.*]] = alloca i64, align 8
236+
; CHECK-NEXT: [[A2:%.*]] = alloca {}, align 8
237+
; CHECK-NEXT: call void @escape(ptr [[A]], ptr [[A2]])
238+
; CHECK-NEXT: ret i1 false
239+
;
240+
%a = alloca i64
241+
%a2 = alloca {}
242+
%gep = getelementptr i8, ptr %a, i64 0
243+
%cmp = icmp eq ptr %gep, %a2
244+
call void @escape(ptr %a, ptr %a2)
245+
ret i1 %cmp
246+
}
247+
248+
define i1 @zst_alloca_middle() {
249+
; CHECK-LABEL: @zst_alloca_middle(
250+
; CHECK-NEXT: [[A:%.*]] = alloca i64, align 8
251+
; CHECK-NEXT: [[A2:%.*]] = alloca {}, align 8
252+
; CHECK-NEXT: call void @escape(ptr [[A]], ptr [[A2]])
253+
; CHECK-NEXT: ret i1 false
254+
;
255+
%a = alloca i64
256+
%a2 = alloca {}
257+
%gep = getelementptr i8, ptr %a, i64 4
258+
%cmp = icmp eq ptr %gep, %a2
259+
call void @escape(ptr %a, ptr %a2)
260+
ret i1 %cmp
261+
}
262+
263+
define i1 @zst_alloca_end() {
264+
; CHECK-LABEL: @zst_alloca_end(
265+
; CHECK-NEXT: [[A:%.*]] = alloca i64, align 8
266+
; CHECK-NEXT: [[A2:%.*]] = alloca {}, align 8
267+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[A]], i64 8
268+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[GEP]], [[A2]]
269+
; CHECK-NEXT: call void @escape(ptr [[A]], ptr [[A2]])
270+
; CHECK-NEXT: ret i1 [[CMP]]
271+
;
272+
%a = alloca i64
273+
%a2 = alloca {}
274+
%gep = getelementptr i8, ptr %a, i64 8
275+
%cmp = icmp eq ptr %gep, %a2
276+
call void @escape(ptr %a, ptr %a2)
277+
ret i1 %cmp
278+
}
279+
280+
@gz = external global {}
281+
282+
define i1 @zst_global_start() {
283+
; CHECK-LABEL: @zst_global_start(
284+
; CHECK-NEXT: [[A:%.*]] = alloca i64, align 8
285+
; CHECK-NEXT: call void @escape(ptr [[A]], ptr @gz)
286+
; CHECK-NEXT: ret i1 false
287+
;
288+
%a = alloca i64
289+
%gep = getelementptr i8, ptr %a, i64 0
290+
%cmp = icmp eq ptr %gep, @gz
291+
call void @escape(ptr %a, ptr @gz)
292+
ret i1 %cmp
293+
}
294+
295+
define i1 @zst_global_middle() {
296+
; CHECK-LABEL: @zst_global_middle(
297+
; CHECK-NEXT: [[A:%.*]] = alloca i64, align 8
298+
; CHECK-NEXT: call void @escape(ptr [[A]], ptr @gz)
299+
; CHECK-NEXT: ret i1 false
300+
;
301+
%a = alloca i64
302+
%gep = getelementptr i8, ptr %a, i64 4
303+
%cmp = icmp eq ptr %gep, @gz
304+
call void @escape(ptr %a, ptr @gz)
305+
ret i1 %cmp
306+
}
307+
308+
define i1 @zst_global_end() {
309+
; CHECK-LABEL: @zst_global_end(
310+
; CHECK-NEXT: [[A:%.*]] = alloca i64, align 8
311+
; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[A]], i64 8
312+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[GEP]], @gz
313+
; CHECK-NEXT: call void @escape(ptr [[A]], ptr @gz)
314+
; CHECK-NEXT: ret i1 [[CMP]]
315+
;
316+
%a = alloca i64
317+
%gep = getelementptr i8, ptr %a, i64 8
318+
%cmp = icmp eq ptr %gep, @gz
319+
call void @escape(ptr %a, ptr @gz)
320+
ret i1 %cmp
321+
}
322+
323+
declare void @escape(ptr, ptr)
324+
233325
attributes #0 = { null_pointer_is_valid }

0 commit comments

Comments
 (0)