; RUN: opt < %s -sccp -disable-output
; END.
target datalayout = "E-p:32:32"
target triple = "powerpc-apple-darwin8.7.0"
	%struct.pat_list = type { i32, %struct.pat_list* }
@JUMP = external global i32		; <i32*> [#uses=1]
@old_D_pat = external global [16 x i8]		; <[16 x i8]*> [#uses=0]

define void @asearch1(i32 %D) {
entry:
	%tmp80 = icmp ult i32 0, %D		; <i1> [#uses=1]
	br i1 %tmp80, label %bb647.preheader, label %cond_true81.preheader
cond_true81.preheader:		; preds = %entry
	ret void
bb647.preheader:		; preds = %entry
	%tmp3.i = call i32 @read( )		; <i32> [#uses=1]
	%tmp6.i = add i32 %tmp3.i, 0		; <i32> [#uses=1]
	%tmp653 = icmp sgt i32 %tmp6.i, 0		; <i1> [#uses=1]
	br i1 %tmp653, label %cond_true654, label %UnifiedReturnBlock
cond_true612:		; preds = %cond_true654
	ret void
cond_next624:		; preds = %cond_true654
	ret void
cond_true654:		; preds = %bb647.preheader
	br i1 undef, label %cond_true612, label %cond_next624
UnifiedReturnBlock:		; preds = %bb647.preheader
	ret void
}

define void @bitap(i32 %D) {
entry:
	%tmp29 = icmp eq i32 0, 0		; <i1> [#uses=1]
	br i1 %tmp29, label %cond_next50, label %cond_next37
cond_next37:		; preds = %entry
	ret void
cond_next50:		; preds = %entry
	%tmp52 = icmp sgt i32 %D, 0		; <i1> [#uses=1]
	br i1 %tmp52, label %cond_true53, label %cond_next71
cond_true53:		; preds = %cond_next50
	%tmp54 = load i32* @JUMP		; <i32> [#uses=1]
	%tmp55 = icmp eq i32 %tmp54, 1		; <i1> [#uses=1]
	br i1 %tmp55, label %cond_true56, label %cond_next63
cond_true56:		; preds = %cond_true53
	%tmp57 = bitcast i32 %D to i32		; <i32> [#uses=1]
	call void @asearch1( i32 %tmp57 )
	ret void
cond_next63:		; preds = %cond_true53
	ret void
cond_next71:		; preds = %cond_next50
	ret void
}

declare i32 @read()

define void @initial_value() {
entry:
	ret void
}

define void @main() {
entry:
	br label %cond_next252
cond_next208:		; preds = %cond_true260
	%tmp229 = call i32 @atoi( )		; <i32> [#uses=1]
	br label %cond_next252
bb217:		; preds = %cond_true260
	ret void
cond_next252:		; preds = %cond_next208, %entry
	%D.0.0 = phi i32 [ 0, %entry ], [ %tmp229, %cond_next208 ]		; <i32> [#uses=1]
	%tmp254 = getelementptr i8** null, i32 1		; <i8**> [#uses=1]
	%tmp256 = load i8** %tmp254		; <i8*> [#uses=1]
	%tmp258 = load i8* %tmp256		; <i8> [#uses=1]
	%tmp259 = icmp eq i8 %tmp258, 45		; <i1> [#uses=1]
	br i1 %tmp259, label %cond_true260, label %bb263
cond_true260:		; preds = %cond_next252
	%tmp205818 = icmp sgt i8 0, -1		; <i1> [#uses=1]
	br i1 %tmp205818, label %cond_next208, label %bb217
bb263:		; preds = %cond_next252
	%tmp265 = icmp eq i32 0, 0		; <i1> [#uses=1]
	br i1 %tmp265, label %cond_next276, label %cond_true266
cond_true266:		; preds = %bb263
	ret void
cond_next276:		; preds = %bb263
	%tmp278 = icmp eq i32 0, 0		; <i1> [#uses=1]
	br i1 %tmp278, label %cond_next298, label %cond_true279
cond_true279:		; preds = %cond_next276
	ret void
cond_next298:		; preds = %cond_next276
	call void @bitap( i32 %D.0.0 )
	ret void
}

declare i32 @atoi()

define void @subset_pset() {
entry:
	ret void
}

define void @strcmp() {
entry:
	ret void
}
