]> granicus.if.org Git - llvm/commitdiff
[InferFunctionAttrs] add/adjust tests for dereferenceable; NFC
authorSanjay Patel <spatel@rotateright.com>
Wed, 10 Jul 2019 14:41:47 +0000 (14:41 +0000)
committerSanjay Patel <spatel@rotateright.com>
Wed, 10 Jul 2019 14:41:47 +0000 (14:41 +0000)
Based on review comments for D64258.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@365636 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/InferFunctionAttrs/dereferenceable.ll

index ffcb8270b9028f7e35075227222f08f108467974..f6580826bd146392a8a5ee06842d8dc8f7e9d0df 100644 (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
+}