cranelift: simplify fneg(fneg(x)) to x (#6034)

This commit is contained in:
Karl Meakin
2023-03-16 22:14:12 +00:00
committed by GitHub
parent dccc2d6269
commit d479951469
2 changed files with 12 additions and 0 deletions

View File

@@ -527,6 +527,9 @@
;; with the `bitselect` instruction, but the pattern is a bit more complicated
;; due to most bitselects-over-floats having bitcasts.
;; fneg(fneg(x)) == x.
(rule (simplify (fneg ty (fneg ty x))) (subsume x))
;; If both of the multiplied arguments to an `fma` are negated then remove
;; both of them since they cancel out.
(rule (simplify (fma ty (fneg ty x) (fneg ty y) z))

View File

@@ -492,6 +492,15 @@ block0(v1: i16):
; check: v4 = sextend.i64 v1
; check: return v4
function %double_fneg(f32) -> f32 {
block0(v1: f32):
v2 = fneg v1
v3 = fneg v2
return v3
}
; check: return v1
function %fma_double_fneg(f32, f32, f32) -> f32 {
block0(v1: f32, v2: f32, v3: f32):
v4 = fneg v1