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