| // REQUIRES: system-linux || system-darwin |
| // TODO: Run only on Linux and MacOS until we figure out how to build |
| // mlir_apfloat_wrappers in a platform-independent way. |
| |
| // RUN: mlir-opt %s --convert-math-to-apfloat --convert-to-llvm | \ |
| // RUN: mlir-runner -e entry --entry-point-result=void \ |
| // RUN: --shared-libs=%mlir_c_runner_utils \ |
| // RUN: --shared-libs=%mlir_apfloat_wrappers | FileCheck %s |
| |
| func.func @entry() { |
| |
| // FP8 |
| |
| %neg14fp8 = arith.constant -1.4 : f8E4M3FN |
| %absfp8 = math.absf %neg14fp8 : f8E4M3FN |
| // CHECK: 1.375 |
| vector.print %absfp8 : f8E4M3FN |
| |
| // see llvm/unittests/ADT/APFloatTest::TEST(APFloatTest, Float8E8M0FNUFMA) |
| %twof8E8M0FNU = arith.constant 2.0 : f8E8M0FNU |
| %fourf8E8M0FNU = arith.constant 4.0 : f8E8M0FNU |
| %eightf8E8M0FNU = arith.constant 8.0 : f8E8M0FNU |
| %fmafp8 = math.fma %fourf8E8M0FNU, %twof8E8M0FNU, %eightf8E8M0FNU : f8E8M0FNU |
| // CHECK: 16 |
| vector.print %fmafp8 : f8E8M0FNU |
| |
| %isinffp8 = math.isinf %neg14fp8 : f8E4M3FN |
| // CHECK: 0 |
| vector.print %isinffp8 : i1 |
| |
| %isnanfp8 = math.isnan %neg14fp8 : f8E4M3FN |
| // CHECK: 0 |
| vector.print %isnanfp8 : i1 |
| |
| %isnormalfp8 = math.isnormal %neg14fp8 : f8E4M3FN |
| // CHECK: 1 |
| vector.print %isnormalfp8 : i1 |
| |
| %isfinitefp8 = math.isfinite %neg14fp8 : f8E4M3FN |
| // CHECK: 1 |
| vector.print %isfinitefp8 : i1 |
| |
| // FP32 |
| |
| %neg14fp32 = arith.constant -1.4 : f32 |
| %absfp32 = math.absf %neg14fp32 : f32 |
| // CHECK: 1.4 |
| vector.print %absfp32 : f32 |
| |
| %twofp32 = arith.constant 2.0 : f32 |
| %fourfp32 = arith.constant 4.0 : f32 |
| %eightfp32 = arith.constant 8.0 : f32 |
| %fmafp32 = math.fma %fourfp32, %twofp32, %eightfp32 : f32 |
| // CHECK: 16 |
| vector.print %fmafp32 : f32 |
| |
| %isinffp32 = math.isinf %neg14fp32 : f32 |
| // CHECK: 0 |
| vector.print %isinffp32 : i1 |
| |
| %isnanfp32 = math.isnan %neg14fp32 : f32 |
| // CHECK: 0 |
| vector.print %isnanfp32 : i1 |
| |
| %isnormalfp32 = math.isnormal %neg14fp32 : f32 |
| // CHECK: 1 |
| vector.print %isnormalfp32 : i1 |
| |
| %isfinitefp32 = math.isfinite %neg14fp32 : f32 |
| // CHECK: 1 |
| vector.print %isfinitefp32 : i1 |
| |
| return |
| } |