summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2009-05-12 01:27:58 +0000
committerDan Gohman <gohman@apple.com>2009-05-12 01:27:58 +0000
commitefb9fbfdab6cab88146792a5db79315313270c7f (patch)
treec876f192e8aa148006478913ebf98fcf056976d4 /test
parent42a5875e107a5dea72745574b0215d9bcdf6deb4 (diff)
downloadllvm-efb9fbfdab6cab88146792a5db79315313270c7f.tar.gz
llvm-efb9fbfdab6cab88146792a5db79315313270c7f.tar.bz2
llvm-efb9fbfdab6cab88146792a5db79315313270c7f.tar.xz
When forgetting SCEVs for loop PHIs, don't forget SCEVUnknown values.
These values aren't analyzable, so they don't care if more information about the loop trip count can be had. Also, SCEVUnknown is used for a PHI while the PHI itself is being analyzed, so it needs to be left in the Scalars map. This fixes a variety of subtle issues. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71533 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/Transforms/IndVarSimplify/loop_evaluate_5.ll32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/Transforms/IndVarSimplify/loop_evaluate_5.ll b/test/Transforms/IndVarSimplify/loop_evaluate_5.ll
new file mode 100644
index 0000000000..c6ce4a2122
--- /dev/null
+++ b/test/Transforms/IndVarSimplify/loop_evaluate_5.ll
@@ -0,0 +1,32 @@
+; RUN: llvm-as < %s | opt -indvars | llvm-dis | grep {120, %bb2.bb3_crit_edge}
+target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64"
+target triple = "i686-pc-linux-gnu"
+
+; Indvars should be able to compute an exit value for %tmp1.
+
+define i32 @testcase(i5 zeroext %k) nounwind readnone {
+entry:
+ br i1 false, label %bb3, label %bb.nph
+
+bb.nph: ; preds = %entry
+ br label %bb
+
+bb: ; preds = %bb2, %bb.nph
+ %result2 = phi i32 [ %tmp1, %bb2 ], [ 0, %bb.nph ] ; <i32> [#uses=1]
+ %k_01 = phi i5 [ %indvar_next1, %bb2 ], [ 0, %bb.nph ] ; <i5> [#uses=2]
+ %tmp2 = zext i5 %k_01 to i32 ; <i32> [#uses=1]
+ %tmp1 = add i32 %tmp2, %result2 ; <i32> [#uses=2]
+ %indvar_next1 = add i5 %k_01, 1 ; <i5> [#uses=2]
+ br label %bb2
+
+bb2: ; preds = %bb
+ %phitmp = icmp eq i5 %indvar_next1, -16 ; <i1> [#uses=1]
+ br i1 %phitmp, label %bb2.bb3_crit_edge, label %bb
+
+bb2.bb3_crit_edge: ; preds = %bb2
+ br label %bb3
+
+bb3: ; preds = %bb2.bb3_crit_edge, %entry
+ %result.lcssa = phi i32 [ %tmp1, %bb2.bb3_crit_edge ], [ 0, %entry ] ; <i32> [#uses=1]
+ ret i32 %result.lcssa
+}