; Base should not be i*3, it should be i*2.
; RUN: opt < %s -loop-reduce -S | \
; RUN:   not grep {mul.*%i, 3}

; Indvar should not start at zero:
; RUN: opt < %s -loop-reduce -S | \
; RUN:   not grep {phi i32 .* 0}
; END.

; mul uint %i, 3

target datalayout = "e-p:32:32"
target triple = "i686-apple-darwin8"
@flags2 = external global [8193 x i8], align 32		; <[8193 x i8]*> [#uses=1]

define void @foo(i32 %k, i32 %i.s) {
entry:
	%i = bitcast i32 %i.s to i32		; <i32> [#uses=2]
	%k_addr.012 = shl i32 %i.s, 1		; <i32> [#uses=1]
	%tmp14 = icmp sgt i32 %k_addr.012, 8192		; <i1> [#uses=1]
	br i1 %tmp14, label %return, label %bb.preheader
bb.preheader:		; preds = %entry
	%tmp. = shl i32 %i, 1		; <i32> [#uses=1]
	br label %bb
bb:		; preds = %bb, %bb.preheader
	%indvar = phi i32 [ %indvar.next, %bb ], [ 0, %bb.preheader ]		; <i32> [#uses=2]
	%tmp.15 = mul i32 %indvar, %i		; <i32> [#uses=1]
	%tmp.16 = add i32 %tmp.15, %tmp.		; <i32> [#uses=2]
	%k_addr.0.0 = bitcast i32 %tmp.16 to i32		; <i32> [#uses=1]
	%gep.upgrd.1 = zext i32 %tmp.16 to i64		; <i64> [#uses=1]
	%tmp = getelementptr [8193 x i8]* @flags2, i32 0, i64 %gep.upgrd.1		; <i8*> [#uses=1]
	store i8 0, i8* %tmp
	%k_addr.0 = add i32 %k_addr.0.0, %i.s		; <i32> [#uses=1]
	%tmp.upgrd.2 = icmp sgt i32 %k_addr.0, 8192		; <i1> [#uses=1]
	%indvar.next = add i32 %indvar, 1		; <i32> [#uses=1]
	br i1 %tmp.upgrd.2, label %return.loopexit, label %bb
return.loopexit:		; preds = %bb
	br label %return
return:		; preds = %return.loopexit, %entry
	ret void
}
