forked from OSchip/llvm-project
[InferFunctionAttrs] add/adjust tests for dereferenceable; NFC
Based on review comments for D64258. llvm-svn: 365636
This commit is contained in:
parent
c44a23f8f4
commit
9cd82a4fbd
|
@ -107,10 +107,11 @@ exit:
|
|||
ret void
|
||||
}
|
||||
|
||||
; The 1st load can trap, so the 2nd and 3rd may never execute.
|
||||
; The volatile load can't be used to prove a non-volatile access is allowed.
|
||||
; The 2nd and 3rd loads may never execute.
|
||||
|
||||
define void @volatile_can_trap(i16* %ptr) {
|
||||
; CHECK-LABEL: @volatile_can_trap(i16* %ptr)
|
||||
define void @volatile_is_not_dereferenceable(i16* %ptr) {
|
||||
; CHECK-LABEL: @volatile_is_not_dereferenceable(i16* %ptr)
|
||||
%arrayidx0 = getelementptr i16, i16* %ptr, i64 0
|
||||
%arrayidx1 = getelementptr i16, i16* %ptr, i64 1
|
||||
%arrayidx2 = getelementptr i16, i16* %ptr, i64 2
|
||||
|
@ -120,6 +121,20 @@ define void @volatile_can_trap(i16* %ptr) {
|
|||
ret void
|
||||
}
|
||||
|
||||
declare void @may_not_return()
|
||||
|
||||
define void @not_guaranteed_to_transfer_execution(i16* %ptr) {
|
||||
; CHECK-LABEL: @not_guaranteed_to_transfer_execution(i16* %ptr)
|
||||
%arrayidx0 = getelementptr i16, i16* %ptr, i64 0
|
||||
%arrayidx1 = getelementptr i16, i16* %ptr, i64 1
|
||||
%arrayidx2 = getelementptr i16, i16* %ptr, i64 2
|
||||
%t0 = load i16, i16* %arrayidx0
|
||||
call void @may_not_return()
|
||||
%t1 = load i16, i16* %arrayidx1
|
||||
%t2 = load i16, i16* %arrayidx2
|
||||
ret void
|
||||
}
|
||||
|
||||
; We must have consecutive accesses.
|
||||
|
||||
define void @variable_gep_index(i8* %unused, i8* %ptr, i64 %variable_index) {
|
||||
|
@ -241,3 +256,23 @@ define void @negative_offset(i32* %arg) {
|
|||
%t1 = load float, float* %arrayidx1
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @stores(i32* %arg) {
|
||||
; CHECK-LABEL: @stores(i32* %arg)
|
||||
%ptr = bitcast i32* %arg to float*
|
||||
%arrayidx0 = getelementptr float, float* %ptr, i64 0
|
||||
%arrayidx1 = getelementptr float, float* %ptr, i64 1
|
||||
store float 1.0, float* %arrayidx0
|
||||
store float 2.0, float* %arrayidx1
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @load_store(i32* %arg) {
|
||||
; CHECK-LABEL: @load_store(i32* %arg)
|
||||
%ptr = bitcast i32* %arg to float*
|
||||
%arrayidx0 = getelementptr float, float* %ptr, i64 0
|
||||
%arrayidx1 = getelementptr float, float* %ptr, i64 1
|
||||
%t1 = load float, float* %arrayidx0
|
||||
store float 2.0, float* %arrayidx1
|
||||
ret void
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue