; RUN: llvm-as <%s | opt -instcombine | llvm-dis >%t1
; RUN: grep {mul i32 %x, 15} %t1
; RUN: grep {ret i32 0} %t1
; RUN: grep {ret i32 -1} %t1 | count 2

define i32 @foo(i32 %x) nounwind {
entry:
	%add = add i32 %x, 0		; <i32> [#uses=1]
	%add2 = add i32 0, %x		; <i32> [#uses=1]
	%mul = mul i32 %x, 1		; <i32> [#uses=1]
	%mul5 = mul i32 1, %x		; <i32> [#uses=1]
	%and = and i32 %x, -1		; <i32> [#uses=1]
	%and8 = and i32 -1, %x		; <i32> [#uses=1]
	%or = or i32 %x, 0		; <i32> [#uses=1]
	%or11 = or i32 0, %x		; <i32> [#uses=1]
	%xor = xor i32 %x, 0		; <i32> [#uses=1]
	%xor14 = xor i32 0, %x		; <i32> [#uses=1]
	%xor17 = xor i32 %x, 4		; <i32> [#uses=1]
	%xor19 = xor i32 %xor17, 4		; <i32> [#uses=1]
	%sub = sub i32 %x, 0		; <i32> [#uses=1]
	%div = sdiv i32 %x, 1		; <i32> [#uses=1]
	%shr = ashr i32 %x, 0		; <i32> [#uses=1]
	%shl = shl i32 %x, 0		; <i32> [#uses=1]
	%add26 = add i32 %add, %add2		; <i32> [#uses=1]
	%add28 = add i32 %add26, %mul		; <i32> [#uses=1]
	%add30 = add i32 %add28, %mul5		; <i32> [#uses=1]
	%add32 = add i32 %add30, %and		; <i32> [#uses=1]
	%add34 = add i32 %add32, %and8		; <i32> [#uses=1]
	%add36 = add i32 %add34, %or		; <i32> [#uses=1]
	%add38 = add i32 %add36, %or11		; <i32> [#uses=1]
	%add40 = add i32 %add38, %xor		; <i32> [#uses=1]
	%add42 = add i32 %add40, %xor14		; <i32> [#uses=1]
	%add44 = add i32 %add42, %xor19		; <i32> [#uses=1]
	%add46 = add i32 %add44, %sub		; <i32> [#uses=1]
	%add48 = add i32 %add46, %div		; <i32> [#uses=1]
	%add50 = add i32 %add48, %shr		; <i32> [#uses=1]
	%add52 = add i32 %add50, %shl		; <i32> [#uses=1]
	br label %return

return:		; preds = %entry
	ret i32 %add52
}

define i32 @bar(i32 %x) nounwind {
entry:
	%mul = mul i32 %x, 0		; <i32> [#uses=1]
	%mul2 = mul i32 0, %x		; <i32> [#uses=1]
	%and = and i32 %x, 0		; <i32> [#uses=1]
	%and5 = and i32 0, %x		; <i32> [#uses=1]
	%div = sdiv i32 0, %x		; <i32> [#uses=1]
	%rem = srem i32 %x, 1		; <i32> [#uses=1]
	%add = add i32 %mul, %mul2		; <i32> [#uses=1]
	%add11 = add i32 %add, %and		; <i32> [#uses=1]
	%add13 = add i32 %add11, %and5		; <i32> [#uses=1]
	%add15 = add i32 %add13, %div		; <i32> [#uses=1]
	%add17 = add i32 %add15, %rem		; <i32> [#uses=1]
	br label %return

return:		; preds = %entry
	ret i32 %add17
}

define i32 @foobar(i32 %x) nounwind {
entry:
	%or = or i32 %x, -1		; <i32> [#uses=1]
	br label %return

return:		; preds = %entry
	ret i32 %or
}

define i32 @barfoo(i32 %x) nounwind {
entry:
	%or = or i32 -1, %x		; <i32> [#uses=1]
	br label %return

return:		; preds = %entry
	ret i32 %or
}
