Skip to content

Commit 1bc922a

Browse files
committed
[inline] Tests for clone return range attribute on the callsite into inlined call [NFC]
1 parent 2ba0838 commit 1bc922a

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

llvm/test/Transforms/Inline/ret_attr_align_and_noundef.ll

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@
55

66
declare ptr @foo()
77
declare void @use.ptr(ptr) willreturn nounwind
8+
declare void @use.val(i8) willreturn nounwind
89
declare void @bar()
910
declare void @baz()
1011
declare ptr @llvm.ptrmask.p0.i64(ptr, i64)
1112
declare i1 @val()
13+
declare i8 @val8()
1214

1315
define ptr @callee0123() {
1416
; CHECK-LABEL: define ptr @callee0123() {
@@ -337,3 +339,74 @@ define ptr @caller12_todo() {
337339
%r = call nonnull ptr @callee12()
338340
ret ptr %r
339341
}
342+
343+
define i8 @callee13() {
344+
; CHECK-LABEL: define i8 @callee13() {
345+
; CHECK-NEXT: [[R:%.*]] = call i8 @val8()
346+
; CHECK-NEXT: ret i8 [[R]]
347+
;
348+
%r = call i8 @val8()
349+
ret i8 %r
350+
}
351+
352+
define i8 @caller13_okay_use_after_poison_anyways() {
353+
; CHECK-LABEL: define i8 @caller13_okay_use_after_poison_anyways() {
354+
; CHECK-NEXT: [[R_I:%.*]] = call i8 @val8()
355+
; CHECK-NEXT: call void @use.val(i8 [[R_I]])
356+
; CHECK-NEXT: ret i8 [[R_I]]
357+
;
358+
%r = call range(i8 0, 10) i8 @callee13()
359+
call void @use.val(i8 %r)
360+
ret i8 %r
361+
}
362+
363+
define i8 @callee14() {
364+
; CHECK-LABEL: define i8 @callee14() {
365+
; CHECK-NEXT: [[R:%.*]] = call noundef i8 @val8()
366+
; CHECK-NEXT: ret i8 [[R]]
367+
;
368+
%r = call noundef i8 @val8()
369+
ret i8 %r
370+
}
371+
372+
define i8 @caller14_fail_creates_ub() {
373+
; CHECK-LABEL: define i8 @caller14_fail_creates_ub() {
374+
; CHECK-NEXT: [[R_I:%.*]] = call noundef i8 @val8()
375+
; CHECK-NEXT: call void @use.val(i8 [[R_I]])
376+
; CHECK-NEXT: ret i8 [[R_I]]
377+
;
378+
%r = call range(i8 0, 10) i8 @callee14()
379+
call void @use.val(i8 %r)
380+
ret i8 %r
381+
}
382+
383+
define i8 @caller14_okay_is_ub_anyways() {
384+
; CHECK-LABEL: define i8 @caller14_okay_is_ub_anyways() {
385+
; CHECK-NEXT: [[R_I:%.*]] = call noundef i8 @val8()
386+
; CHECK-NEXT: call void @use.val(i8 [[R_I]])
387+
; CHECK-NEXT: ret i8 [[R_I]]
388+
;
389+
%r = call noundef range(i8 0, 10) i8 @callee14()
390+
call void @use.val(i8 %r)
391+
ret i8 %r
392+
}
393+
394+
define i8 @callee15() {
395+
; CHECK-LABEL: define i8 @callee15() {
396+
; CHECK-NEXT: [[R:%.*]] = call range(i8 5, 10) i8 @val8()
397+
; CHECK-NEXT: ret i8 [[R]]
398+
;
399+
%r = call range(i8 5, 10) i8 @val8()
400+
ret i8 %r
401+
}
402+
403+
define i8 @caller15_okay_intersect_ranges() {
404+
; CHECK-LABEL: define i8 @caller15_okay_intersect_ranges() {
405+
; CHECK-NEXT: [[R_I:%.*]] = call range(i8 5, 10) i8 @val8()
406+
; CHECK-NEXT: call void @use.val(i8 [[R_I]])
407+
; CHECK-NEXT: ret i8 [[R_I]]
408+
;
409+
%r = call range(i8 0, 7) i8 @callee15()
410+
call void @use.val(i8 %r)
411+
ret i8 %r
412+
}

0 commit comments

Comments
 (0)