Skip to content

Commit

Permalink
[InferFunctionAttrs] add/adjust tests for dereferenceable; NFC
Browse files Browse the repository at this point in the history
Based on review comments for D64258.

llvm-svn: 365636
  • Loading branch information
rotateright committed Jul 10, 2019
1 parent c44a23f commit 9cd82a4
Showing 1 changed file with 38 additions and 3 deletions.
41 changes: 38 additions & 3 deletions llvm/test/Transforms/InferFunctionAttrs/dereferenceable.ll
Expand Up @@ -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
Expand All @@ -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) {
Expand Down Expand Up @@ -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
}

0 comments on commit 9cd82a4

Please sign in to comment.