; New testcase, this contains a bunch of simple instructions that should be
; handled by a code generator.

; RUN: llc < %s

define i32 @add(i32 %A, i32 %B) {
	%R = add i32 %A, %B		; <i32> [#uses=1]
	ret i32 %R
}

define i32 @sub(i32 %A, i32 %B) {
	%R = sub i32 %A, %B		; <i32> [#uses=1]
	ret i32 %R
}

define i32 @mul(i32 %A, i32 %B) {
	%R = mul i32 %A, %B		; <i32> [#uses=1]
	ret i32 %R
}

define i32 @sdiv(i32 %A, i32 %B) {
	%R = sdiv i32 %A, %B		; <i32> [#uses=1]
	ret i32 %R
}

define i32 @udiv(i32 %A, i32 %B) {
	%R = udiv i32 %A, %B		; <i32> [#uses=1]
	ret i32 %R
}

define i32 @srem(i32 %A, i32 %B) {
	%R = srem i32 %A, %B		; <i32> [#uses=1]
	ret i32 %R
}

define i32 @urem(i32 %A, i32 %B) {
	%R = urem i32 %A, %B		; <i32> [#uses=1]
	ret i32 %R
}

define i32 @and(i32 %A, i32 %B) {
	%R = and i32 %A, %B		; <i32> [#uses=1]
	ret i32 %R
}

define i32 @or(i32 %A, i32 %B) {
	%R = or i32 %A, %B		; <i32> [#uses=1]
	ret i32 %R
}

define i32 @xor(i32 %A, i32 %B) {
	%R = xor i32 %A, %B		; <i32> [#uses=1]
	ret i32 %R
}
