; Make sure this doesn't turn into an infinite loop

; RUN: opt < %s -simplifycfg -constprop -simplifycfg |\
; RUN:   llvm-dis | grep bb86
; END.
	
%struct.anon = type { i32, i32, i32, i32, [1024 x i8] }
@_zero_ = external global %struct.anon*		; <%struct.anon**> [#uses=2]
@_one_ = external global %struct.anon*		; <%struct.anon**> [#uses=4]
@str = internal constant [4 x i8] c"%d\0A\00"		; <[4 x i8]*> [#uses=0]

declare i32 @bc_compare(%struct.anon*, %struct.anon*)

declare void @free_num(%struct.anon**)

declare %struct.anon* @copy_num(%struct.anon*)

declare void @init_num(%struct.anon**)

declare %struct.anon* @new_num(i32, i32)

declare void @int2num(%struct.anon**, i32)

declare void @bc_multiply(%struct.anon*, %struct.anon*, %struct.anon**, i32)

declare void @bc_raise(%struct.anon*, %struct.anon*, %struct.anon**, i32)

declare i32 @bc_divide(%struct.anon*, %struct.anon*, %struct.anon**, i32)

declare void @bc_add(%struct.anon*, %struct.anon*, %struct.anon**)

declare i32 @_do_compare(%struct.anon*, %struct.anon*, i32, i32)

declare i32 @printf(i8*, ...)

define i32 @bc_sqrt(%struct.anon** %num, i32 %scale) {
entry:
	%guess = alloca %struct.anon*		; <%struct.anon**> [#uses=7]
	%guess1 = alloca %struct.anon*		; <%struct.anon**> [#uses=7]
	%point5 = alloca %struct.anon*		; <%struct.anon**> [#uses=3]
	%tmp = load %struct.anon** %num		; <%struct.anon*> [#uses=1]
	%tmp1 = load %struct.anon** @_zero_		; <%struct.anon*> [#uses=1]
	%tmp.upgrd.1 = call i32 @bc_compare( %struct.anon* %tmp, %struct.anon* %tmp1 )		; <i32> [#uses=2]
	%tmp.upgrd.2 = icmp slt i32 %tmp.upgrd.1, 0		; <i1> [#uses=1]
	br i1 %tmp.upgrd.2, label %cond_true, label %cond_false
cond_true:		; preds = %entry
	ret i32 0
cond_false:		; preds = %entry
	%tmp5 = icmp eq i32 %tmp.upgrd.1, 0		; <i1> [#uses=1]
	br i1 %tmp5, label %cond_true6, label %cond_next13
cond_true6:		; preds = %cond_false
	call void @free_num( %struct.anon** %num )
	%tmp8 = load %struct.anon** @_zero_		; <%struct.anon*> [#uses=1]
	%tmp9 = call %struct.anon* @copy_num( %struct.anon* %tmp8 )		; <%struct.anon*> [#uses=1]
	store %struct.anon* %tmp9, %struct.anon** %num
	ret i32 1
cond_next13:		; preds = %cond_false
	%tmp15 = load %struct.anon** %num		; <%struct.anon*> [#uses=1]
	%tmp16 = load %struct.anon** @_one_		; <%struct.anon*> [#uses=1]
	%tmp17 = call i32 @bc_compare( %struct.anon* %tmp15, %struct.anon* %tmp16 )		; <i32> [#uses=2]
	%tmp19 = icmp eq i32 %tmp17, 0		; <i1> [#uses=1]
	br i1 %tmp19, label %cond_true20, label %cond_next27
cond_true20:		; preds = %cond_next13
	call void @free_num( %struct.anon** %num )
	%tmp22 = load %struct.anon** @_one_		; <%struct.anon*> [#uses=1]
	%tmp23 = call %struct.anon* @copy_num( %struct.anon* %tmp22 )		; <%struct.anon*> [#uses=1]
	store %struct.anon* %tmp23, %struct.anon** %num
	ret i32 1
cond_next27:		; preds = %cond_next13
	%tmp29 = load %struct.anon** %num		; <%struct.anon*> [#uses=1]
	%tmp30 = getelementptr %struct.anon* %tmp29, i32 0, i32 2		; <i32*> [#uses=1]
	%tmp31 = load i32* %tmp30		; <i32> [#uses=2]
	%tmp33 = icmp sge i32 %tmp31, %scale		; <i1> [#uses=1]
	%max = select i1 %tmp33, i32 %tmp31, i32 %scale		; <i32> [#uses=4]
	%tmp35 = add i32 %max, 2		; <i32> [#uses=0]
	call void @init_num( %struct.anon** %guess )
	call void @init_num( %struct.anon** %guess1 )
	%tmp36 = call %struct.anon* @new_num( i32 1, i32 1 )		; <%struct.anon*> [#uses=2]
	store %struct.anon* %tmp36, %struct.anon** %point5
	%tmp.upgrd.3 = getelementptr %struct.anon* %tmp36, i32 0, i32 4, i32 1		; <i8*> [#uses=1]
	store i8 5, i8* %tmp.upgrd.3
	%tmp39 = icmp slt i32 %tmp17, 0		; <i1> [#uses=1]
	br i1 %tmp39, label %cond_true40, label %cond_false43
cond_true40:		; preds = %cond_next27
	%tmp41 = load %struct.anon** @_one_		; <%struct.anon*> [#uses=1]
	%tmp42 = call %struct.anon* @copy_num( %struct.anon* %tmp41 )		; <%struct.anon*> [#uses=1]
	store %struct.anon* %tmp42, %struct.anon** %guess
	br label %bb80.outer
cond_false43:		; preds = %cond_next27
	call void @int2num( %struct.anon** %guess, i32 10 )
	%tmp45 = load %struct.anon** %num		; <%struct.anon*> [#uses=1]
	%tmp46 = getelementptr %struct.anon* %tmp45, i32 0, i32 1		; <i32*> [#uses=1]
	%tmp47 = load i32* %tmp46		; <i32> [#uses=1]
	call void @int2num( %struct.anon** %guess1, i32 %tmp47 )
	%tmp48 = load %struct.anon** %guess1		; <%struct.anon*> [#uses=1]
	%tmp49 = load %struct.anon** %point5		; <%struct.anon*> [#uses=1]
	call void @bc_multiply( %struct.anon* %tmp48, %struct.anon* %tmp49, %struct.anon** %guess1, i32 %max )
	%tmp51 = load %struct.anon** %guess1		; <%struct.anon*> [#uses=1]
	%tmp52 = getelementptr %struct.anon* %tmp51, i32 0, i32 2		; <i32*> [#uses=1]
	store i32 0, i32* %tmp52
	%tmp53 = load %struct.anon** %guess		; <%struct.anon*> [#uses=1]
	%tmp54 = load %struct.anon** %guess1		; <%struct.anon*> [#uses=1]
	call void @bc_raise( %struct.anon* %tmp53, %struct.anon* %tmp54, %struct.anon** %guess, i32 %max )
	br label %bb80.outer
bb80.outer:		; preds = %cond_true83, %cond_false43, %cond_true40
	%done.1.ph = phi i32 [ 1, %cond_true83 ], [ 0, %cond_true40 ], [ 0, %cond_false43 ]		; <i32> [#uses=1]
	br label %bb80
bb80:		; preds = %cond_true83, %bb80.outer
	%tmp82 = icmp eq i32 %done.1.ph, 0		; <i1> [#uses=1]
	br i1 %tmp82, label %cond_true83, label %bb86
cond_true83:		; preds = %bb80
	%tmp71 = call i32 @_do_compare( %struct.anon* null, %struct.anon* null, i32 0, i32 1 )		; <i32> [#uses=1]
	%tmp76 = icmp eq i32 %tmp71, 0		; <i1> [#uses=1]
	br i1 %tmp76, label %bb80.outer, label %bb80
bb86:		; preds = %bb80
	call void @free_num( %struct.anon** %num )
	%tmp88 = load %struct.anon** %guess		; <%struct.anon*> [#uses=1]
	%tmp89 = load %struct.anon** @_one_		; <%struct.anon*> [#uses=1]
	%tmp92 = call i32 @bc_divide( %struct.anon* %tmp88, %struct.anon* %tmp89, %struct.anon** %num, i32 %max )		; <i32> [#uses=0]
	call void @free_num( %struct.anon** %guess )
	call void @free_num( %struct.anon** %guess1 )
	call void @free_num( %struct.anon** %point5 )
	ret i32 1
}
