blob: 78c4df9b7086fc974711c753ed8eaa8de3ae5a0b [file]
vm.module @arithmetic_ops_f64 {
//===--------------------------------------------------------------------===//
// ExtF64: Native floating-point arithmetic
//===--------------------------------------------------------------------===//
vm.export @test_add_f64
vm.func @test_add_f64() {
%c1 = vm.const.f64 1.5
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.add.f64 %c1dno, %c1dno : f64
%c2 = vm.const.f64 3.0
vm.check.eq %v, %c2, "1.5+1.5=3" : f64
vm.return
}
vm.export @test_sub_f64
vm.func @test_sub_f64() {
%c1 = vm.const.f64 3.0
%c1dno = util.optimization_barrier %c1 : f64
%c2 = vm.const.f64 2.5
%c2dno = util.optimization_barrier %c2 : f64
%v = vm.sub.f64 %c1dno, %c2dno : f64
%c3 = vm.const.f64 0.5
vm.check.eq %v, %c3, "3.0-2.5=0.5" : f64
vm.return
}
vm.export @test_mul_f64
vm.func @test_mul_f64() {
%c1 = vm.const.f64 2.5
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.mul.f64 %c1dno, %c1dno : f64
%c2 = vm.const.f64 6.25
vm.check.eq %v, %c2, "2.5*2.5=6.25" : f64
vm.return
}
vm.export @test_div_f64
vm.func @test_div_f64() {
%c1 = vm.const.f64 4.0
%c1dno = util.optimization_barrier %c1 : f64
%c2 = vm.const.f64 -2.0
%c2dno = util.optimization_barrier %c2 : f64
%v = vm.div.f64 %c1dno, %c2dno : f64
%c3 = vm.const.f64 -2.0
vm.check.eq %v, %c3, "4.0/-2.0=-2.0" : f64
vm.return
}
vm.export @test_rem_f64
vm.func @test_rem_f64() {
%c1 = vm.const.f64 -3.0
%c1dno = util.optimization_barrier %c1 : f64
%c2 = vm.const.f64 -2.0
%c2dno = util.optimization_barrier %c2 : f64
%v = vm.rem.f64 %c1dno, %c2dno : f64
%c3 = vm.const.f64 1.0
vm.check.eq %v, %c3, "-3.0%-2.0=1.0" : f64
vm.return
}
vm.export @test_fma_f64
vm.func @test_fma_f64() {
%c2 = vm.const.f64 2.0
%c2dno = util.optimization_barrier %c2 : f64
%c3 = vm.const.f64 3.0
%c3dno = util.optimization_barrier %c3 : f64
%c5 = vm.const.f64 5.0
%c5dno = util.optimization_barrier %c5 : f64
%v = vm.fma.f64 %c2dno, %c3dno, %c5dno : f64
%c11 = vm.const.f64 11.0
vm.check.eq %v, %c11, "2.0*3.0+5.0=11.0" : f64
vm.return
}
vm.export @test_abs_f64
vm.func @test_abs_f64() {
%c1 = vm.const.f64 -1.0
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.abs.f64 %c1dno : f64
%c2 = vm.const.f64 1.0
vm.check.eq %v, %c2, "abs(-1.0)=1.0" : f64
vm.return
}
vm.export @test_neg_f64
vm.func @test_neg_f64() {
%c1 = vm.const.f64 -1.0
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.neg.f64 %c1dno : f64
%c2 = vm.const.f64 1.0
vm.check.eq %v, %c2, "neg(-1.0)=1.0" : f64
vm.return
}
vm.export @test_ceil_f64
vm.func @test_ceil_f64() {
%c1 = vm.const.f64 1.5
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.ceil.f64 %c1dno : f64
%c2 = vm.const.f64 2.0
vm.check.eq %v, %c2, "ceil(1.5)=2.0" : f64
vm.return
}
vm.export @test_floor_f64
vm.func @test_floor_f64() {
%c15 = vm.const.f64 1.5
%c15dno = util.optimization_barrier %c15 : f64
%v = vm.floor.f64 %c15dno : f64
%c1 = vm.const.f64 1.0
vm.check.eq %v, %c1, "floor(1.5)=1.0" : f64
vm.return
}
vm.export @test_round_f64
vm.func @test_round_f64() {
%c15 = vm.const.f64 1.5
%c15dno = util.optimization_barrier %c15 : f64
%v = vm.round.f64 %c15dno : f64
%c2 = vm.const.f64 2.0
vm.check.eq %v, %c2, "round(1.5)=2.0" : f64
vm.return
}
vm.export @test_round_f64_even
vm.func @test_round_f64_even() {
%c15 = vm.const.f64 1.5
%c15dno = util.optimization_barrier %c15 : f64
%v = vm.round.f64.even %c15dno : f64
%c2 = vm.const.f64 2.0
vm.check.eq %v, %c2, "roundeven(1.5)=2.0" : f64
vm.return
}
vm.export @test_min_f64
vm.func @test_min_f64() {
%cn3 = vm.const.f64 -3.0
%cn3dno = util.optimization_barrier %cn3 : f64
%cn2 = vm.const.f64 -2.0
%cn2dno = util.optimization_barrier %cn2 : f64
%v = vm.min.f64 %cn3dno, %cn2dno : f64
vm.check.eq %v, %cn3, "min(-3.0,-2.0)=-3.0" : f64
vm.return
}
vm.export @test_max_f64
vm.func @test_max_f64() {
%cn3 = vm.const.f64 -3.0
%cn3dno = util.optimization_barrier %cn3 : f64
%cn2 = vm.const.f64 -2.0
%cn2dno = util.optimization_barrier %cn2 : f64
%v = vm.max.f64 %cn3dno, %cn2dno : f64
vm.check.eq %v, %cn2, "max(-3.0,-2.0)=-2.0" : f64
vm.return
}
vm.export @test_atan_f64
vm.func @test_atan_f64() {
%c1 = vm.const.f64 1.0
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.atan.f64 %c1dno : f64
%c2 = vm.const.f64 0.7853981633974483
vm.check.eq %v, %c2, "atan(1.0)=0.7853981633974483" : f64
vm.return
}
vm.export @test_atan2_f64
vm.func @test_atan2_f64() {
%c1 = vm.const.f64 1.0
%c1dno = util.optimization_barrier %c1 : f64
%c2 = vm.const.f64 0.0
%c2dno = util.optimization_barrier %c2 : f64
%v = vm.atan2.f64 %c1dno, %c2dno : f64
%c3 = vm.const.f64 1.5707963267948966
vm.check.eq %v, %c3, "atan2(1.0,0.0)=1.5707963267948966" : f64
vm.return
}
vm.export @test_cos_f64
vm.func @test_cos_f64() {
%c1 = vm.const.f64 0.5
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.cos.f64 %c1dno : f64
%c2 = vm.const.f64 0.8775825618903728
vm.check.eq %v, %c2, "cos(0.5)=0.8775825618903728" : f64
vm.return
}
vm.export @test_sin_f64
vm.func @test_sin_f64() {
%c1 = vm.const.f64 0.5
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.sin.f64 %c1dno : f64
%c2 = vm.const.f64 0.479425538604203
vm.check.eq %v, %c2, "sin(0.5)=0.479425538604203" : f64
vm.return
}
vm.export @test_exp_f64
vm.func @test_exp_f64() {
%c1 = vm.const.f64 1.0
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.exp.f64 %c1dno : f64
%c2 = vm.const.f64 2.718281828459045
vm.check.eq %v, %c2, "exp(1.0)=2.718281828459045" : f64
vm.return
}
vm.export @test_exp2_f64
vm.func @test_exp2_f64() {
%c1 = vm.const.f64 2.0
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.exp2.f64 %c1dno : f64
%c2 = vm.const.f64 4.0
vm.check.eq %v, %c2, "exp(2.0)=4.0" : f64
vm.return
}
vm.export @test_expm1_f64
vm.func @test_expm1_f64() {
%c1 = vm.const.f64 2.0
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.expm1.f64 %c1dno : f64
%c2 = vm.const.f64 6.38905609893065
vm.check.eq %v, %c2, "expm1(2.0)=6.38905609893065" : f64
vm.return
}
vm.export @test_log_f64
vm.func @test_log_f64() {
%c1 = vm.const.f64 10.0
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.log.f64 %c1dno : f64
%c2 = vm.const.f64 2.302585092994046
vm.check.eq %v, %c2, "log(10.0)=2.302585092994046" : f64
vm.return
}
vm.export @test_log10_f64
vm.func @test_log10_f64() {
%c1 = vm.const.f64 10.0
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.log10.f64 %c1dno : f64
%c2 = vm.const.f64 1.0
vm.check.eq %v, %c2, "log10(10.0)=1.0" : f64
vm.return
}
vm.export @test_log1p_f64
vm.func @test_log1p_f64() {
%c1 = vm.const.f64 10.0
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.log1p.f64 %c1dno : f64
%c2 = vm.const.f64 2.3978952727983707
vm.check.eq %v, %c2, "log1p(10.0)=2.3978952727983707" : f64
vm.return
}
vm.export @test_log2_f64
vm.func @test_log2_f64() {
%c1 = vm.const.f64 10.0
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.log2.f64 %c1dno : f64
%c2 = vm.const.f64 3.321928094887362
vm.check.eq %v, %c2, "log2(10.0)=3.321928094887362" : f64
vm.return
}
vm.export @test_pow_f64
vm.func @test_pow_f64() {
%c1 = vm.const.f64 3.0
%c1dno = util.optimization_barrier %c1 : f64
%c2 = vm.const.f64 2.0
%c2dno = util.optimization_barrier %c2 : f64
%v = vm.pow.f64 %c1dno, %c2dno : f64
%c3 = vm.const.f64 9.0
vm.check.eq %v, %c3, "pow(3.0,2.0)=9.0" : f64
vm.return
}
vm.export @test_rsqrt_f64
vm.func @test_rsqrt_f64() {
%c1 = vm.const.f64 4.0
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.rsqrt.f64 %c1dno : f64
%c2 = vm.const.f64 0.5
vm.check.eq %v, %c2, "rsqrt(4.0)=0.5" : f64
vm.return
}
vm.export @test_sqrt_f64
vm.func @test_sqrt_f64() {
%c1 = vm.const.f64 4.0
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.sqrt.f64 %c1dno : f64
%c2 = vm.const.f64 2.0
vm.check.eq %v, %c2, "sqrt(4.0)=2.0" : f64
vm.return
}
vm.export @test_tanh_f64
vm.func @test_tanh_f64() {
%c1 = vm.const.f64 0.5
%c1dno = util.optimization_barrier %c1 : f64
%v = vm.tanh.f64 %c1dno : f64
%c2 = vm.const.f64 0.46211715726000974
vm.check.eq %v, %c2, "tanh(0.5)=0.46211715726000974" : f64
vm.return
}
// TODO(#5854): vm.check.nearly_eq; this can differ across libm impls.
// vm.export @test_erf_f64
// vm.func @test_erf_f64() {
// %c1 = vm.const.f64 0.5
// %c1dno = util.optimization_barrier %c1 : f64
// %v = vm.erf.f64 %c1dno : f64
// %c2 = vm.const.f64 0.520499945
// vm.check.eq %v, %c2, "erf(0.5)=0.520499945" : f64
// vm.return
// }
}