aboutsummaryrefslogtreecommitdiffstats
path: root/test/Analysis
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2011-02-13 03:14:49 +0000
committerChris Lattner <sabre@nondot.org>2011-02-13 03:14:49 +0000
commit8ebaf909580ada88d9952327323ded1e328d0708 (patch)
tree3303d9d85f1e8098e2186f3a6ed73e1333263591 /test/Analysis
parent26f23100ac8165c510c00f7a37f1ab13bf66f141 (diff)
downloadexternal_llvm-8ebaf909580ada88d9952327323ded1e328d0708.zip
external_llvm-8ebaf909580ada88d9952327323ded1e328d0708.tar.gz
external_llvm-8ebaf909580ada88d9952327323ded1e328d0708.tar.bz2
teach SCEV that the scale and addition of an inbounds gep don't NSW.
This fixes a FIXME in scev-aa.ll (allowing a new no-alias result) and generally makes things more precise. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125449 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Analysis')
-rw-r--r--test/Analysis/ScalarEvolution/nsw.ll28
-rw-r--r--test/Analysis/ScalarEvolution/scev-aa.ll7
2 files changed, 31 insertions, 4 deletions
diff --git a/test/Analysis/ScalarEvolution/nsw.ll b/test/Analysis/ScalarEvolution/nsw.ll
index 010cf60..9d8e2b6 100644
--- a/test/Analysis/ScalarEvolution/nsw.ll
+++ b/test/Analysis/ScalarEvolution/nsw.ll
@@ -76,3 +76,31 @@ for.cond.for.end_crit_edge.i.i: ; preds = %for.body.i.i
_ZSt4fillIPiiEvT_S1_RKT0_.exit: ; preds = %entry, %for.cond.for.end_crit_edge.i.i
ret void
}
+
+; Various checks for inbounds geps.
+define void @test3(i32* %begin, i32* %end) nounwind ssp {
+entry:
+ %cmp7.i.i = icmp eq i32* %begin, %end
+ br i1 %cmp7.i.i, label %_ZSt4fillIPiiEvT_S1_RKT0_.exit, label %for.body.i.i
+
+for.body.i.i: ; preds = %entry, %for.body.i.i
+ %indvar.i.i = phi i64 [ %tmp, %for.body.i.i ], [ 0, %entry ]
+; CHECK: %indvar.i.i
+; CHECK: {0,+,1}<nuw><nsw><%for.body.i.i>
+ %tmp = add nsw i64 %indvar.i.i, 1
+; CHECK: %tmp =
+; CHECK: {1,+,1}<nuw><nsw><%for.body.i.i>
+ %ptrincdec.i.i = getelementptr inbounds i32* %begin, i64 %tmp
+; CHECK: %ptrincdec.i.i =
+; CHECK: {(4 + %begin),+,4}<nsw><%for.body.i.i>
+ %__first.addr.08.i.i = getelementptr inbounds i32* %begin, i64 %indvar.i.i
+; CHECK: %__first.addr.08.i.i
+; CHECK: {%begin,+,4}<nsw><%for.body.i.i>
+ store i32 0, i32* %__first.addr.08.i.i, align 4
+ %cmp.i.i = icmp eq i32* %ptrincdec.i.i, %end
+ br i1 %cmp.i.i, label %_ZSt4fillIPiiEvT_S1_RKT0_.exit, label %for.body.i.i
+; CHECK: Loop %for.body.i.i: Unpredictable backedge-taken count.
+; CHECK: Loop %for.body.i.i: Unpredictable max backedge-taken count.
+_ZSt4fillIPiiEvT_S1_RKT0_.exit: ; preds = %for.body.i.i, %entry
+ ret void
+} \ No newline at end of file
diff --git a/test/Analysis/ScalarEvolution/scev-aa.ll b/test/Analysis/ScalarEvolution/scev-aa.ll
index 866664a..dd5a66c 100644
--- a/test/Analysis/ScalarEvolution/scev-aa.ll
+++ b/test/Analysis/ScalarEvolution/scev-aa.ll
@@ -190,9 +190,8 @@ define void @bar() {
ret void
}
-; TODO: This is theoretically provable to be NoAlias.
; CHECK: Function: nonnegative: 2 pointers, 0 call sites
-; CHECK: MayAlias: i64* %arrayidx, i64* %p
+; CHECK: NoAlias: i64* %arrayidx, i64* %p
define void @nonnegative(i64* %p) nounwind {
entry:
@@ -211,6 +210,6 @@ for.end: ; preds = %for.body, %entry
ret void
}
-; CHECK: 13 no alias responses
-; CHECK: 27 may alias responses
+; CHECK: 14 no alias responses
+; CHECK: 26 may alias responses
; CHECK: 18 must alias responses