; This testcase tests to see if adds and PHI's are handled in their full 
; generality.  This testcase comes from the following C code:
;
; void f() {
;   int i;
;   for (i = 1; i < 100; i++) {
;     if (i)
;       g();
;   }
; }
;
; Note that this is a "feature" test, not a correctness test.
;
; XFAIL: *
; RUN: llvm-as < %s | opt -cee -simplifycfg | llvm-dis | not grep cond213
;
implementation   ; Functions:

declare void %g()

void %f() {
bb0:		; No predecessors!
	br label %bb2

bb2:		; preds = %bb4, %bb0
	%cann-indvar = phi int [ 0, %bb0 ], [ %add1-indvar, %bb4 ]		; <int> [#uses=2]
	%add1-indvar = add int %cann-indvar, 1		; <int> [#uses=2]
	%cond213 = seteq int %add1-indvar, 0		; <bool> [#uses=1]
	br bool %cond213, label %bb4, label %bb3

bb3:		; preds = %bb2
	call void %g( )
	br label %bb4

bb4:		; preds = %bb3, %bb2
	%reg109 = add int %cann-indvar, 2		; <int> [#uses=1]
	%cond217 = setle int %reg109, 99		; <bool> [#uses=1]
	br bool %cond217, label %bb2, label %bb5

bb5:		; preds = %bb4
	ret void
}
