; RUN: llc < %s
@G = external global i32		; <i32*> [#uses=1]

define void @encode_one_frame(i64 %tmp.2i) {
entry:
	%tmp.9 = icmp eq i32 0, 0		; <i1> [#uses=1]
	br i1 %tmp.9, label %endif.0, label %shortcirc_next.0

then.5.i:		; preds = %shortcirc_next.i
	%tmp.114.i = sdiv i64 %tmp.2i, 3		; <i64> [#uses=1]
	%tmp.111.i = call i64 @lseek( i32 0, i64 %tmp.114.i, i32 1 )		; <i64> [#uses=0]
	ret void

shortcirc_next.0:		; preds = %entry
	ret void

endif.0:		; preds = %entry
	%tmp.324.i = icmp eq i32 0, 0		; <i1> [#uses=2]
	%tmp.362.i = icmp slt i32 0, 0		; <i1> [#uses=1]
	br i1 %tmp.324.i, label %else.4.i, label %then.11.i37

then.11.i37:		; preds = %endif.0
	ret void

else.4.i:		; preds = %endif.0
	br i1 %tmp.362.i, label %else.5.i, label %then.12.i

then.12.i:		; preds = %else.4.i
	ret void

else.5.i:		; preds = %else.4.i
	br i1 %tmp.324.i, label %then.0.i40, label %then.17.i

then.17.i:		; preds = %else.5.i
	ret void

then.0.i40:		; preds = %else.5.i
	%tmp.8.i42 = icmp eq i32 0, 0		; <i1> [#uses=1]
	br i1 %tmp.8.i42, label %else.1.i56, label %then.1.i52

then.1.i52:		; preds = %then.0.i40
	ret void

else.1.i56:		; preds = %then.0.i40
	%tmp.28.i = load i32* @G		; <i32> [#uses=1]
	%tmp.29.i = icmp eq i32 %tmp.28.i, 1		; <i1> [#uses=1]
	br i1 %tmp.29.i, label %shortcirc_next.i, label %shortcirc_done.i

shortcirc_next.i:		; preds = %else.1.i56
	%tmp.34.i = icmp eq i32 0, 3		; <i1> [#uses=1]
	br i1 %tmp.34.i, label %then.5.i, label %endif.5.i

shortcirc_done.i:		; preds = %else.1.i56
	ret void

endif.5.i:		; preds = %shortcirc_next.i
	ret void
}

declare i64 @lseek(i32, i64, i32)
