[InferFunctionAttrs] add/adjust tests for dereferenceable; NFC

Based on review comments for D64258.

llvm-svn: 365636
This commit is contained in:
Sanjay Patel 2019-07-10 14:41:47 +00:00
parent c44a23f8f4
commit 9cd82a4fbd
1 changed files with 38 additions and 3 deletions

View File

@ -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
}