summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/InferFunctionAttrs/dereferenceable.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/InferFunctionAttrs/dereferenceable.ll')
-rw-r--r--llvm/test/Transforms/InferFunctionAttrs/dereferenceable.ll28
1 files changed, 28 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InferFunctionAttrs/dereferenceable.ll b/llvm/test/Transforms/InferFunctionAttrs/dereferenceable.ll
index 322d85aba9c..bf7daba40d4 100644
--- a/llvm/test/Transforms/InferFunctionAttrs/dereferenceable.ll
+++ b/llvm/test/Transforms/InferFunctionAttrs/dereferenceable.ll
@@ -161,6 +161,19 @@ define void @volatile_is_not_dereferenceable(i16* %ptr) {
ret void
}
+; TODO: We should allow inference for atomic (but not volatile) ops.
+
+define void @atomic_is_alright(i16* %ptr) {
+; CHECK-LABEL: @atomic_is_alright(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 atomic i16, i16* %arrayidx0 unordered, align 2
+ %t1 = load i16, i16* %arrayidx1
+ %t2 = load i16, i16* %arrayidx2
+ ret void
+}
+
declare void @may_not_return()
define void @not_guaranteed_to_transfer_execution(i16* %ptr) {
@@ -244,6 +257,21 @@ define void @more_bytes(i32* dereferenceable(8) %ptr) {
ret void
}
+; Improve on existing dereferenceable_or_null attribute.
+
+define void @more_bytes_and_not_null(i32* dereferenceable_or_null(8) %ptr) {
+; CHECK-LABEL: @more_bytes_and_not_null(i32* dereferenceable_or_null(8) %ptr)
+ %arrayidx3 = getelementptr i32, i32* %ptr, i64 3
+ %arrayidx1 = getelementptr i32, i32* %ptr, i64 1
+ %arrayidx0 = getelementptr i32, i32* %ptr, i64 0
+ %arrayidx2 = getelementptr i32, i32* %ptr, i64 2
+ %t3 = load i32, i32* %arrayidx3
+ %t1 = load i32, i32* %arrayidx1
+ %t2 = load i32, i32* %arrayidx2
+ %t0 = load i32, i32* %arrayidx0
+ ret void
+}
+
; But don't pessimize existing dereferenceable attribute.
define void @better_bytes(i32* dereferenceable(100) %ptr) {
OpenPOWER on IntegriCloud