| ;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. |
| ;; NOTE: This test was ported using port_passes_tests_to_lit.py and could be cleaned up. |
| |
| ;; RUN: foreach %s %t wasm-opt -O --fast-math -S -o - | filecheck %s |
| |
| ;; with fast-math we can optimize some of these patterns |
| (module |
| (func "div" (result f32) |
| (f32.div |
| (f32.const -nan:0x23017a) |
| (f32.const 1) |
| ) |
| ) |
| (func "mul1" (result f32) |
| (f32.mul |
| (f32.const -nan:0x34546d) |
| (f32.const 1) |
| ) |
| ) |
| (func "mul2" (result f32) |
| (f32.mul |
| (f32.const 1) |
| (f32.const -nan:0x34546d) |
| ) |
| ) |
| (func "add1" (result f32) |
| (f32.add |
| (f32.const -nan:0x34546d) |
| (f32.const -0) |
| ) |
| ) |
| (func "add2" (result f32) |
| (f32.add |
| (f32.const -0) |
| (f32.const -nan:0x34546d) |
| ) |
| ) |
| (func "add3" (result f32) |
| (f32.add |
| (f32.const -nan:0x34546d) |
| (f32.const 0) |
| ) |
| ) |
| (func "add4" (result f32) |
| (f32.add |
| (f32.const 0) |
| (f32.const -nan:0x34546d) |
| ) |
| ) |
| (func "sub1" (result f32) |
| (f32.sub |
| (f32.const -nan:0x34546d) |
| (f32.const 0) |
| ) |
| ) |
| (func "sub2" (result f32) |
| (f32.sub |
| (f32.const -nan:0x34546d) |
| (f32.const -0) |
| ) |
| ) |
| (func "mul_neg_one1" (param $x f32) (result f32) |
| (f32.mul |
| (local.get $x) |
| (f32.const -1) |
| ) |
| ) |
| (func "mul_neg_one2" (param $x f64) (result f64) |
| (f64.mul |
| (local.get $x) |
| (f64.const -1) |
| ) |
| ) |
| (func "abs_sub_zero1" (param $x f32) (result f32) |
| ;; abs(0 - x) ==> abs(x) |
| (f32.abs |
| (f32.sub |
| (f32.const 0) |
| (local.get $x) |
| ) |
| ) |
| ) |
| (func "abs_sub_zero2" (param $x f64) (result f64) |
| ;; abs(0 - x) ==> abs(x) |
| (f64.abs |
| (f64.sub |
| (f64.const 0) |
| (local.get $x) |
| ) |
| ) |
| ) |
| ) |
| ;; CHECK: (type $none_=>_f32 (func (result f32))) |
| |
| ;; CHECK: (type $f32_=>_f32 (func (param f32) (result f32))) |
| |
| ;; CHECK: (type $f64_=>_f64 (func (param f64) (result f64))) |
| |
| ;; CHECK: (export "div" (func $0)) |
| |
| ;; CHECK: (export "mul1" (func $1)) |
| |
| ;; CHECK: (export "mul2" (func $2)) |
| |
| ;; CHECK: (export "add1" (func $1)) |
| |
| ;; CHECK: (export "add2" (func $2)) |
| |
| ;; CHECK: (export "add3" (func $2)) |
| |
| ;; CHECK: (export "add4" (func $2)) |
| |
| ;; CHECK: (export "sub1" (func $1)) |
| |
| ;; CHECK: (export "sub2" (func $2)) |
| |
| ;; CHECK: (export "mul_neg_one1" (func $9)) |
| |
| ;; CHECK: (export "mul_neg_one2" (func $10)) |
| |
| ;; CHECK: (export "abs_sub_zero1" (func $11)) |
| |
| ;; CHECK: (export "abs_sub_zero2" (func $12)) |
| |
| ;; CHECK: (func $0 (; has Stack IR ;) (result f32) |
| ;; CHECK-NEXT: (f32.const -nan:0x23017a) |
| ;; CHECK-NEXT: ) |
| |
| ;; CHECK: (func $1 (; has Stack IR ;) (result f32) |
| ;; CHECK-NEXT: (f32.const -nan:0x34546d) |
| ;; CHECK-NEXT: ) |
| |
| ;; CHECK: (func $2 (; has Stack IR ;) (result f32) |
| ;; CHECK-NEXT: (f32.const nan:0x400000) |
| ;; CHECK-NEXT: ) |
| |
| ;; CHECK: (func $9 (; has Stack IR ;) (param $0 f32) (result f32) |
| ;; CHECK-NEXT: (f32.neg |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| |
| ;; CHECK: (func $10 (; has Stack IR ;) (param $0 f64) (result f64) |
| ;; CHECK-NEXT: (f64.neg |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| |
| ;; CHECK: (func $11 (; has Stack IR ;) (param $0 f32) (result f32) |
| ;; CHECK-NEXT: (f32.abs |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| |
| ;; CHECK: (func $12 (; has Stack IR ;) (param $0 f64) (result f64) |
| ;; CHECK-NEXT: (f64.abs |
| ;; CHECK-NEXT: (local.get $0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |