blob: 4ec12e1e6266655b9dc829179577469394600bf2 [file] [log] [blame]
vm.module @arithmetic_ops {
//===--------------------------------------------------------------------===//
// Native integer arithmetic
//===--------------------------------------------------------------------===//
vm.export @test_add_i32
vm.func @test_add_i32() {
%c1 = vm.const.i32 1
%c1dno = util.optimization_barrier %c1 : i32
%v = vm.add.i32 %c1dno, %c1dno : i32
%c2 = vm.const.i32 2
vm.check.eq %v, %c2, "1+1=2" : i32
vm.return
}
vm.export @test_sub_i32
vm.func @test_sub_i32() {
%c1 = vm.const.i32 3
%c1dno = util.optimization_barrier %c1 : i32
%c2 = vm.const.i32 2
%c2dno = util.optimization_barrier %c2 : i32
%v = vm.sub.i32 %c1dno, %c2dno : i32
%c3 = vm.const.i32 1
vm.check.eq %v, %c3, "3-2=1" : i32
vm.return
}
vm.export @test_mul_i32
vm.func @test_mul_i32() {
%c1 = vm.const.i32 2
%c1dno = util.optimization_barrier %c1 : i32
%v = vm.mul.i32 %c1dno, %c1dno : i32
%c2 = vm.const.i32 4
vm.check.eq %v, %c2, "2*2=4" : i32
vm.return
}
vm.export @test_div_i32s
vm.func @test_div_i32s() {
%c1 = vm.const.i32 4
%c1dno = util.optimization_barrier %c1 : i32
%c2 = vm.const.i32 -2
%c2dno = util.optimization_barrier %c2 : i32
%v = vm.div.i32.s %c1dno, %c2dno : i32
%c3 = vm.const.i32 -2
vm.check.eq %v, %c3, "4/-2=-2" : i32
vm.return
}
vm.export @test_div_i32u
vm.func @test_div_i32u() {
%c1 = vm.const.i32 4
%c1dno = util.optimization_barrier %c1 : i32
%c2 = vm.const.i32 2
%c2dno = util.optimization_barrier %c2 : i32
%v = vm.div.i32.u %c1dno, %c2dno : i32
%c3 = vm.const.i32 2
vm.check.eq %v, %c3, "4/2=2" : i32
vm.return
}
vm.export @test_rem_i32s
vm.func @test_rem_i32s() {
%c1 = vm.const.i32 -3
%c1dno = util.optimization_barrier %c1 : i32
%c2 = vm.const.i32 -2
%c2dno = util.optimization_barrier %c2 : i32
%v = vm.rem.i32.s %c1dno, %c2dno : i32
%c3 = vm.const.i32 -1
vm.check.eq %v, %c3, "-3%-2=-1" : i32
vm.return
}
vm.export @test_rem_i32u
vm.func @test_rem_i32u() {
%c1 = vm.const.i32 3
%c1dno = util.optimization_barrier %c1 : i32
%c2 = vm.const.i32 2
%c2dno = util.optimization_barrier %c2 : i32
%v = vm.rem.i32.u %c1dno, %c2dno : i32
%c3 = vm.const.i32 1
vm.check.eq %v, %c3, "3%2=1" : i32
vm.return
}
vm.export @test_fma_i32
vm.func @test_fma_i32() {
%c2 = vm.const.i32 2
%c2dno = util.optimization_barrier %c2 : i32
%c3 = vm.const.i32 3
%c3dno = util.optimization_barrier %c3 : i32
%c5 = vm.const.i32 5
%c5dno = util.optimization_barrier %c5 : i32
%v = vm.fma.i32 %c2dno, %c3dno, %c5dno : i32
%c11 = vm.const.i32 11
vm.check.eq %v, %c11, "2*3+5=11" : i32
vm.return
}
vm.export @test_abs_i32
vm.func @test_abs_i32() {
%cn1 = vm.const.i32 -1
%cn1dno = util.optimization_barrier %cn1 : i32
%v = vm.abs.i32 %cn1dno : i32
%c1 = vm.const.i32 1
vm.check.eq %v, %c1, "abs(-1)=1" : i32
vm.return
}
vm.export @test_min_i32s
vm.func @test_min_i32s() {
%cn3 = vm.const.i32 -3
%cn3dno = util.optimization_barrier %cn3 : i32
%c2 = vm.const.i32 2
%c2dno = util.optimization_barrier %c2 : i32
%v = vm.min.i32.s %cn3dno, %c2dno : i32
vm.check.eq %v, %cn3, "smin(-3,2)=-3" : i32
vm.return
}
vm.export @test_min_i32u
vm.func @test_min_i32u() {
%cn3 = vm.const.i32 -3
%cn3dno = util.optimization_barrier %cn3 : i32
%c2 = vm.const.i32 2
%c2dno = util.optimization_barrier %c2 : i32
%v = vm.min.i32.u %cn3dno, %c2dno : i32
vm.check.eq %v, %c2, "umin(-3,2)=2" : i32
vm.return
}
vm.export @test_max_i32s
vm.func @test_max_i32s() {
%cn3 = vm.const.i32 -3
%cn3dno = util.optimization_barrier %cn3 : i32
%c2 = vm.const.i32 2
%c2dno = util.optimization_barrier %c2 : i32
%v = vm.max.i32.s %cn3dno, %c2dno : i32
vm.check.eq %v, %c2, "smax(-3,2)=2" : i32
vm.return
}
vm.export @test_max_i32u
vm.func @test_max_i32u() {
%cn3 = vm.const.i32 -3
%cn3dno = util.optimization_barrier %cn3 : i32
%c2 = vm.const.i32 2
%c2dno = util.optimization_barrier %c2 : i32
%v = vm.max.i32.u %cn3dno, %c2dno : i32
vm.check.eq %v, %cn3, "umax(-3,2)=-3" : i32
vm.return
}
vm.export @test_not_i32
vm.func @test_not_i32() {
%c1 = vm.const.i32 0
%c1dno = util.optimization_barrier %c1 : i32
%v = vm.not.i32 %c1dno : i32
%c2 = vm.const.i32 -1
vm.check.eq %v, %c2, "~0=-1" : i32
vm.return
}
vm.export @test_and_i32
vm.func @test_and_i32() {
%c1 = vm.const.i32 5
%c1dno = util.optimization_barrier %c1 : i32
%c2 = vm.const.i32 3
%c2dno = util.optimization_barrier %c2 : i32
%v = vm.and.i32 %c1dno, %c2dno : i32
%c3 = vm.const.i32 1
vm.check.eq %v, %c3, "5&3=1" : i32
vm.return
}
vm.export @test_or_i32
vm.func @test_or_i32() {
%c1 = vm.const.i32 5
%c1dno = util.optimization_barrier %c1 : i32
%c2 = vm.const.i32 3
%c2dno = util.optimization_barrier %c2 : i32
%v = vm.or.i32 %c1dno, %c2dno : i32
%c3 = vm.const.i32 7
vm.check.eq %v, %c3, "5|3=7" : i32
vm.return
}
vm.export @test_xor_i32
vm.func @test_xor_i32() {
%c1 = vm.const.i32 5
%c1dno = util.optimization_barrier %c1 : i32
%c2 = vm.const.i32 3
%c2dno = util.optimization_barrier %c2 : i32
%v = vm.xor.i32 %c1dno, %c2dno : i32
%c3 = vm.const.i32 6
vm.check.eq %v, %c3, "5^3=6" : i32
vm.return
}
vm.export @test_ctlz_i32_const_zero
vm.func @test_ctlz_i32_const_zero() {
%c = vm.const.i32 0
%cdno = util.optimization_barrier %c : i32
%actual = vm.ctlz.i32 %cdno : i32
%expected = vm.const.i32 32
vm.check.eq %actual, %expected, "ctlz(0)=32" : i32
vm.return
}
vm.export @test_ctlz_i32_const_1
vm.func @test_ctlz_i32_const_1() {
%c = vm.const.i32 1
%cdno = util.optimization_barrier %c : i32
%actual = vm.ctlz.i32 %cdno : i32
%expected = vm.const.i32 31
vm.check.eq %actual, %expected, "ctlz(1)=31" : i32
vm.return
}
vm.export @test_ctlz_i32_const_ffffffff
vm.func @test_ctlz_i32_const_ffffffff() {
%c = vm.const.i32 0xFFFFFFFF
%cdno = util.optimization_barrier %c : i32
%actual = vm.ctlz.i32 %cdno : i32
%expected = vm.const.i32 0
vm.check.eq %actual, %expected, "ctlz(0xFFFFFFFF)=0" : i32
vm.return
}
}