summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMax Graey <maxgraey@gmail.com>2022-09-15 23:17:51 +0300
committerGitHub <noreply@github.com>2022-09-15 13:17:51 -0700
commit2fdb22bc26185e94ccd775bbfe8ea271be03df45 (patch)
tree7c9935698de035f905eafc247f547af6acd3aea1 /test
parent0d8aff6d85850a5f05ed6f5dc359f1b93120769d (diff)
downloadbinaryen-2fdb22bc26185e94ccd775bbfe8ea271be03df45.tar.gz
binaryen-2fdb22bc26185e94ccd775bbfe8ea271be03df45.tar.bz2
binaryen-2fdb22bc26185e94ccd775bbfe8ea271be03df45.zip
[OptimizeInstructions] More canonizations for floating points (#5033)
x - C -> x + (-C) min(C, x) -> min(x, C) max(C, x) -> max(x, C) And remove redundant rules
Diffstat (limited to 'test')
-rw-r--r--test/lit/passes/optimize-instructions.wast109
-rw-r--r--test/passes/optimize-instructions_fuzz-exec.txt28
2 files changed, 107 insertions, 30 deletions
diff --git a/test/lit/passes/optimize-instructions.wast b/test/lit/passes/optimize-instructions.wast
index df8037a72..c1835442d 100644
--- a/test/lit/passes/optimize-instructions.wast
+++ b/test/lit/passes/optimize-instructions.wast
@@ -2016,6 +2016,103 @@
(drop (i32.add (i32.ctz (local.get $x)) (i32.eqz (local.get $y))))
(drop (i32.add (i32.eqz (local.get $x)) (i32.ctz (local.get $y))))
)
+ ;; CHECK: (func $canonicalize-consts-floats (param $x f32) (param $y f64)
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f32.add
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: (f32.const -1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f64.add
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: (f64.const -1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f32.mul
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: (f32.const 3.4000000953674316)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f64.mul
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: (f64.const 3.4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f32.min
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: (f32.const 3.4000000953674316)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f64.min
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: (f64.const 3.4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f32.max
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: (f32.const 3.4000000953674316)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f64.max
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: (f64.const 3.4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f32.const nan:0x400000)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f64.const nan:0x8000000000000)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f32.const nan:0x400000)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f64.const nan:0x8000000000000)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f32.copysign
+ ;; CHECK-NEXT: (f32.const 1)
+ ;; CHECK-NEXT: (local.get $x)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (drop
+ ;; CHECK-NEXT: (f64.copysign
+ ;; CHECK-NEXT: (f64.const 1)
+ ;; CHECK-NEXT: (local.get $y)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: )
+ (func $canonicalize-consts-floats (param $x f32) (param $y f64)
+ (drop (f32.sub (local.get $x) (f32.const 1.0)))
+ (drop (f64.sub (local.get $y) (f64.const 1.0)))
+
+ (drop (f32.mul (f32.const 3.4) (local.get $x)))
+ (drop (f64.mul (f64.const 3.4) (local.get $y)))
+
+ (drop (f32.min (f32.const 3.4) (local.get $x)))
+ (drop (f64.min (f64.const 3.4) (local.get $y)))
+
+ (drop (f32.max (f32.const 3.4) (local.get $x)))
+ (drop (f64.max (f64.const 3.4) (local.get $y)))
+
+ (drop (f32.min (f32.const nan) (local.get $x)))
+ (drop (f64.min (f64.const nan) (local.get $y)))
+
+ (drop (f32.max (f32.const nan) (local.get $x)))
+ (drop (f64.max (f64.const nan) (local.get $y)))
+
+ ;; skips
+ (drop (f32.copysign (f32.const 1.0) (local.get $x)))
+ (drop (f64.copysign (f64.const 1.0) (local.get $y)))
+ )
;; CHECK: (func $ne0 (result i32)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (call $ne0)
@@ -10303,15 +10400,15 @@
)
;; CHECK: (func $const-float-zero (param $fx f32) (param $fy f64)
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (f32.sub
+ ;; CHECK-NEXT: (f32.add
;; CHECK-NEXT: (local.get $fx)
- ;; CHECK-NEXT: (f32.const 0)
+ ;; CHECK-NEXT: (f32.const -0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (f64.sub
+ ;; CHECK-NEXT: (f64.add
;; CHECK-NEXT: (local.get $fy)
- ;; CHECK-NEXT: (f64.const 0)
+ ;; CHECK-NEXT: (f64.const -0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
@@ -10363,9 +10460,9 @@
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
- ;; CHECK-NEXT: (f32.sub
+ ;; CHECK-NEXT: (f32.add
;; CHECK-NEXT: (f32.const -nan:0x34546d)
- ;; CHECK-NEXT: (f32.const 0)
+ ;; CHECK-NEXT: (f32.const -0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
diff --git a/test/passes/optimize-instructions_fuzz-exec.txt b/test/passes/optimize-instructions_fuzz-exec.txt
index 16b17cf26..33a3945dc 100644
--- a/test/passes/optimize-instructions_fuzz-exec.txt
+++ b/test/passes/optimize-instructions_fuzz-exec.txt
@@ -73,20 +73,10 @@
)
)
(call $logf32
- (f32.min
- (f32.const -nan:0x7fff82)
- (f32.neg
- (f32.const -nan:0x7ff622)
- )
- )
+ (f32.const nan:0x400000)
)
(call $logf32
- (f32.max
- (f32.const -nan:0x7fff82)
- (f32.neg
- (f32.const -nan:0x7ff622)
- )
- )
+ (f32.const nan:0x400000)
)
)
(func $1
@@ -126,20 +116,10 @@
)
)
(call $logf64
- (f64.min
- (f64.const -nan:0xfffffffffff82)
- (f64.neg
- (f64.const -nan:0xfffffffffa622)
- )
- )
+ (f64.const nan:0x8000000000000)
)
(call $logf64
- (f64.max
- (f64.const -nan:0xfffffffffff82)
- (f64.neg
- (f64.const -nan:0xfffffffffa622)
- )
- )
+ (f64.const nan:0x8000000000000)
)
)
(func $2