1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-21 20:12:56 +02:00
llvm-mirror/test/Transforms/LoopDeletion/multiple-exit-conditions.ll
Dan Gohman ad2555c9a3 Make LoopDeletion check the maximum backedge taken count, rather than the
exact backedge taken count, when checking for infinite loops. This allows
it to delete loops with multiple exit conditions.

llvm-svn: 84952
2009-10-23 17:10:01 +00:00

28 lines
617 B
LLVM

; RUN: opt < %s -loop-deletion -S | FileCheck %s
; ScalarEvolution can prove the loop iteration is finite, even though
; it can't represent the exact trip count as an expression. That's
; good enough to let the loop be deleted.
; CHECK: entry:
; CHECK-NEXT: br label %return
; CHECK: return:
; CHECK-NEXT: ret void
define void @foo(i64 %n, i64 %m) nounwind {
entry:
br label %bb
bb:
%x.0 = phi i64 [ 0, %entry ], [ %t0, %bb ]
%t0 = add i64 %x.0, 1
%t1 = icmp slt i64 %x.0, %n
%t3 = icmp sgt i64 %x.0, %m
%t4 = and i1 %t1, %t3
br i1 %t4, label %bb, label %return
return:
ret void
}