blob: fff8e3fcfb2a3381a47aeb2477b19e0faaa7ad84 [file] [log] [blame]
; This is a very early test that just checks the representation of i32
; arithmetic instructions. No assembly tests are done.
; RUN: %llvm2ice --verbose inst %s | FileCheck %s
; RUN: %llvm2ice --verbose none %s | FileCheck --check-prefix=ERRORS %s
; RUN: %llvm2iceinsts %s | %szdiff %s | FileCheck --check-prefix=DUMP %s
; RUN: %llvm2iceinsts --pnacl %s | %szdiff %s \
; RUN: | FileCheck --check-prefix=DUMP %s
define i32 @Add(i32 %a, i32 %b) {
; CHECK: define i32 @Add
entry:
%add = add i32 %b, %a
; CHECK: add
tail call void @Use(i32 %add)
; CHECK: call Use
ret i32 %add
}
declare void @Use(i32)
define i32 @And(i32 %a, i32 %b) {
; CHECK: define i32 @And
entry:
%and = and i32 %b, %a
; CHECK: and
tail call void @Use(i32 %and)
; CHECK: call Use
ret i32 %and
}
define i32 @Or(i32 %a, i32 %b) {
; CHECK: define i32 @Or
entry:
%or = or i32 %b, %a
; CHECK: or
tail call void @Use(i32 %or)
; CHECK: call Use
ret i32 %or
}
define i32 @Xor(i32 %a, i32 %b) {
; CHECK: define i32 @Xor
entry:
%xor = xor i32 %b, %a
; CHECK: xor
tail call void @Use(i32 %xor)
; CHECK: call Use
ret i32 %xor
}
define i32 @Sub(i32 %a, i32 %b) {
; CHECK: define i32 @Sub
entry:
%sub = sub i32 %a, %b
; CHECK: sub
tail call void @Use(i32 %sub)
; CHECK: call Use
ret i32 %sub
}
define i32 @Mul(i32 %a, i32 %b) {
; CHECK: define i32 @Mul
entry:
%mul = mul i32 %b, %a
; CHECK: imul
tail call void @Use(i32 %mul)
; CHECK: call Use
ret i32 %mul
}
define i32 @Sdiv(i32 %a, i32 %b) {
; CHECK: define i32 @Sdiv
entry:
%div = sdiv i32 %a, %b
; CHECK: cdq
; CHECK: idiv
tail call void @Use(i32 %div)
; CHECK: call Use
ret i32 %div
}
define i32 @Srem(i32 %a, i32 %b) {
; CHECK: define i32 @Srem
entry:
%rem = srem i32 %a, %b
; CHECK: cdq
; CHECK: idiv
tail call void @Use(i32 %rem)
; CHECK: call Use
ret i32 %rem
}
define i32 @Udiv(i32 %a, i32 %b) {
; CHECK: define i32 @Udiv
entry:
%div = udiv i32 %a, %b
; CHECK: div
tail call void @Use(i32 %div)
; CHECK: call Use
ret i32 %div
}
define i32 @Urem(i32 %a, i32 %b) {
; CHECK: define i32 @Urem
entry:
%rem = urem i32 %a, %b
; CHECK: div
tail call void @Use(i32 %rem)
; CHECK: call Use
ret i32 %rem
}
; ERRORS-NOT: ICE translation error
; DUMP-NOT: SZ