summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms
diff options
context:
space:
mode:
authorSanjoy Das <sanjoy@playingwithpointers.com>2014-10-10 21:22:34 +0000
committerSanjoy Das <sanjoy@playingwithpointers.com>2014-10-10 21:22:34 +0000
commit1f05c51e5ecdf6e35a58689aead4dc162850914a (patch)
tree5424ae2c0072a6571b4c38fe04e159cbc4004b88 /llvm/test/Transforms
parent38811ccb97cb4fd5a4b9a9e830dcff7c79066acf (diff)
downloadbcm5719-llvm-1f05c51e5ecdf6e35a58689aead4dc162850914a.tar.gz
bcm5719-llvm-1f05c51e5ecdf6e35a58689aead4dc162850914a.zip
This patch teaches ScalarEvolution to pick and use !range metadata.
It also makes it more aggressive in querying range information by adding a call to isKnownPredicateWithRanges to isLoopBackedgeGuardedByCond and isLoopEntryGuardedByCond. phabricator: http://reviews.llvm.org/D5638 Reviewed by: atrick, hfinkel llvm-svn: 219532
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r--llvm/test/Transforms/IndVarSimplify/use-range-metadata.ll37
1 files changed, 37 insertions, 0 deletions
diff --git a/llvm/test/Transforms/IndVarSimplify/use-range-metadata.ll b/llvm/test/Transforms/IndVarSimplify/use-range-metadata.ll
new file mode 100644
index 00000000000..7ac4f11bc2e
--- /dev/null
+++ b/llvm/test/Transforms/IndVarSimplify/use-range-metadata.ll
@@ -0,0 +1,37 @@
+;; RUN: opt -S < %s -indvars | FileCheck %s
+
+;; Check if IndVarSimplify understands !range metadata.
+
+declare void @abort()
+
+define i1 @iterate(i32* nocapture readonly %buffer) {
+entry:
+ %length = load i32* %buffer, !range !0
+ br label %loop.preheader
+
+loop.preheader:
+ br label %loop
+
+loop:
+ %idx = phi i32 [ %idx.inc, %loop.next ], [ 0, %loop.preheader ]
+ %oob.pred = icmp slt i32 %idx, %length
+ br i1 %oob.pred, label %loop.next, label %oob
+; CHECK: br i1 true, label %loop.next, label %oob
+
+loop.next:
+ %idx.inc = add i32 %idx, 1
+ %exit.pred = icmp slt i32 %idx.inc, %length
+ br i1 %exit.pred, label %loop, label %abort.loopexit
+
+abort.loopexit:
+ br label %abort
+
+abort:
+ ret i1 false
+
+oob:
+ tail call void @abort()
+ ret i1 false
+}
+
+!0 = metadata !{i32 1, i32 100}
OpenPOWER on IntegriCloud