forked from OSchip/llvm-project
[FuncAttrs] Add additional willreturn tests (NFC)
This commit is contained in:
parent
fb98a1be43
commit
f711cb9a8a
|
@ -16,8 +16,11 @@ define i32 @mustprogress_load(i32* %ptr) mustprogress {
|
||||||
; CHECK-NEXT: define i32 @mustprogress_load(
|
; CHECK-NEXT: define i32 @mustprogress_load(
|
||||||
;
|
;
|
||||||
entry:
|
entry:
|
||||||
|
br label %while.body
|
||||||
|
|
||||||
|
while.body:
|
||||||
%r = load i32, i32* %ptr
|
%r = load i32, i32* %ptr
|
||||||
ret i32 %r
|
br label %while.body
|
||||||
}
|
}
|
||||||
|
|
||||||
define void @mustprogress_store(i32* %ptr) mustprogress {
|
define void @mustprogress_store(i32* %ptr) mustprogress {
|
||||||
|
@ -25,8 +28,11 @@ define void @mustprogress_store(i32* %ptr) mustprogress {
|
||||||
; CHECK: define void @mustprogress_store(
|
; CHECK: define void @mustprogress_store(
|
||||||
;
|
;
|
||||||
entry:
|
entry:
|
||||||
|
br label %while.body
|
||||||
|
|
||||||
|
while.body:
|
||||||
store i32 0, i32* %ptr
|
store i32 0, i32* %ptr
|
||||||
ret void
|
br label %while.body
|
||||||
}
|
}
|
||||||
|
|
||||||
declare void @unknown_fn()
|
declare void @unknown_fn()
|
||||||
|
@ -65,4 +71,59 @@ B:
|
||||||
ret i64 0
|
ret i64 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define void @willreturn_no_loop(i1 %c, i32* %p) {
|
||||||
|
; CHECK-NOT: Function Attrs: {{.*}}willreturn
|
||||||
|
; CHECK: define void @willreturn_no_loop(
|
||||||
|
;
|
||||||
|
br i1 %c, label %if, label %else
|
||||||
|
|
||||||
|
if:
|
||||||
|
load atomic i32, i32* %p seq_cst, align 4
|
||||||
|
call void @fn_willreturn()
|
||||||
|
br label %end
|
||||||
|
|
||||||
|
else:
|
||||||
|
store atomic i32 0, i32* %p seq_cst, align 4
|
||||||
|
br label %end
|
||||||
|
|
||||||
|
end:
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
define void @willreturn_non_returning_function(i1 %c, i32* %p) {
|
||||||
|
; CHECK-NOT: Function Attrs: {{.*}}willreturn
|
||||||
|
; CHECK: define void @willreturn_non_returning_function(
|
||||||
|
;
|
||||||
|
call void @unknown_fn()
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
define void @willreturn_loop() {
|
||||||
|
; CHECK-NOT: Function Attrs: {{.*}}willreturn
|
||||||
|
; CHECK: define void @willreturn_loop(
|
||||||
|
;
|
||||||
|
br label %loop
|
||||||
|
|
||||||
|
loop:
|
||||||
|
br label %loop
|
||||||
|
}
|
||||||
|
|
||||||
|
define void @willreturn_finite_loop() {
|
||||||
|
; CHECK-NOT: Function Attrs: {{.*}}willreturn
|
||||||
|
; CHECK: define void @willreturn_finite_loop(
|
||||||
|
;
|
||||||
|
entry:
|
||||||
|
br label %loop
|
||||||
|
|
||||||
|
loop:
|
||||||
|
%i = phi i32 [ 0, %entry], [ %i.inc, %loop ]
|
||||||
|
%i.inc = add nuw i32 %i, 1
|
||||||
|
%c = icmp ne i32 %i.inc, 100
|
||||||
|
br i1 %c, label %loop, label %end
|
||||||
|
|
||||||
|
end:
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
declare i64 @fn_noread() readnone
|
declare i64 @fn_noread() readnone
|
||||||
|
declare void @fn_willreturn() willreturn
|
||||||
|
|
Loading…
Reference in New Issue