; RUN: opt < %s -passes='mem2reg,instcombine' -S | grep store
; PR590


define void @zero(i8* %p, i32 %n) {
entry:
	%p_addr = alloca i8*		; <i8**> [#uses=2]
	%n_addr = alloca i32		; <i32*> [#uses=2]
	%i = alloca i32		; <i32*> [#uses=6]
	%out = alloca i32		; <i32*> [#uses=2]
	%undef = alloca i32		; <i32*> [#uses=2]
	store i8* %p, i8** %p_addr
	store i32 %n, i32* %n_addr
	store i32 0, i32* %i
	br label %loopentry
loopentry:		; preds = %endif, %entry
	%tmp.0 = load i32, i32* %n_addr		; <i32> [#uses=1]
	%tmp.1 = add i32 %tmp.0, 1		; <i32> [#uses=1]
	%tmp.2 = load i32, i32* %i		; <i32> [#uses=1]
	%tmp.3 = icmp sgt i32 %tmp.1, %tmp.2		; <i1> [#uses=2]
	%tmp.4 = zext i1 %tmp.3 to i32		; <i32> [#uses=0]
	br i1 %tmp.3, label %no_exit, label %return
no_exit:		; preds = %loopentry
	%tmp.5 = load i32, i32* %undef		; <i32> [#uses=1]
	store i32 %tmp.5, i32* %out
	store i32 0, i32* %undef
	%tmp.6 = load i32, i32* %i		; <i32> [#uses=1]
	%tmp.7 = icmp sgt i32 %tmp.6, 0		; <i1> [#uses=2]
	%tmp.8 = zext i1 %tmp.7 to i32		; <i32> [#uses=0]
	br i1 %tmp.7, label %then, label %endif
then:		; preds = %no_exit
	%tmp.9 = load i8*, i8** %p_addr		; <i8*> [#uses=1]
	%tmp.10 = load i32, i32* %i		; <i32> [#uses=1]
	%tmp.11 = sub i32 %tmp.10, 1		; <i32> [#uses=1]
	%tmp.12 = getelementptr i8, i8* %tmp.9, i32 %tmp.11		; <i8*> [#uses=1]
	%tmp.13 = load i32, i32* %out		; <i32> [#uses=1]
	%tmp.14 = trunc i32 %tmp.13 to i8		; <i8> [#uses=1]
	store i8 %tmp.14, i8* %tmp.12
	br label %endif
endif:		; preds = %then, %no_exit
	%tmp.15 = load i32, i32* %i		; <i32> [#uses=1]
	%inc = add i32 %tmp.15, 1		; <i32> [#uses=1]
	store i32 %inc, i32* %i
	br label %loopentry
return:		; preds = %loopentry
	ret void
}
