summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorJustin Bogner <mail@justinbogner.com>2014-05-23 00:06:56 +0000
committerJustin Bogner <mail@justinbogner.com>2014-05-23 00:06:56 +0000
commitcbb8438bb3b2a1f69b3bc9d5e0676b45f06a8876 (patch)
tree88d6b7a53119087a96e8c86c2d82faec7da5c7b8 /llvm/test
parentf713cced0e39b258ce856743ef7fb61908206417 (diff)
downloadbcm5719-llvm-cbb8438bb3b2a1f69b3bc9d5e0676b45f06a8876.tar.gz
bcm5719-llvm-cbb8438bb3b2a1f69b3bc9d5e0676b45f06a8876.zip
ScalarEvolution: Fix handling of AddRecs in isKnownPredicate
ScalarEvolution::isKnownPredicate() can wrongly reduce a comparison when both the LHS and RHS are SCEVAddRecExprs. This checks that both LHS and RHS are guarded in the case when both are SCEVAddRecExprs. The test case is against indvars because I could not find a way to directly test SCEV. Patch by Sanjay Patel! llvm-svn: 209487
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/IndVarSimplify/pr18223.ll30
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/test/Transforms/IndVarSimplify/pr18223.ll b/llvm/test/Transforms/IndVarSimplify/pr18223.ll
new file mode 100644
index 00000000000..738f75c0fe0
--- /dev/null
+++ b/llvm/test/Transforms/IndVarSimplify/pr18223.ll
@@ -0,0 +1,30 @@
+; RUN: opt -indvars -S < %s | FileCheck %s
+
+; indvars should transform the phi node pair from the for-loop
+; CHECK-LABEL: @main(
+; CHECK: ret = phi i32 [ 0, %entry ], [ 0, {{.*}} ]
+
+@c = common global i32 0, align 4
+
+define i32 @main() #0 {
+entry:
+ %0 = load i32* @c, align 4
+ %tobool = icmp eq i32 %0, 0
+ br i1 %tobool, label %for.body, label %exit
+
+for.body:
+ %inc2 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
+ %sub = add i32 %inc2, -1
+ %cmp1 = icmp uge i32 %sub, %inc2
+ %conv = zext i1 %cmp1 to i32
+ br label %for.inc
+
+for.inc:
+ %inc = add nsw i32 %inc2, 1
+ %cmp = icmp slt i32 %inc, 5
+ br i1 %cmp, label %for.body, label %exit
+
+exit:
+ %ret = phi i32 [ 0, %entry ], [ %conv, %for.inc ]
+ ret i32 %ret
+}
OpenPOWER on IntegriCloud