llvm-6502/test/Transforms/IndVarSimplify/pr18223.ll
Justin Bogner e318ce611f 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!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209487 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-23 00:06:56 +00:00

31 lines
718 B
LLVM

; 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
}