cranelift: rewrite iabs(ineg(x)) and iabs(iabs(x)) (#6072)

* cranelift: rerwite `iabs(ineg(x))`` and `iabs(iabs(x))`

* Fix comment on `iabs(iabs(x))` rewrite

* Remove subsume on rewrite for `iabs(ineg(x))`
This commit is contained in:
Karl Meakin
2023-03-21 00:12:21 +00:00
committed by GitHub
parent a3b21031d4
commit 7d9318fe77
2 changed files with 25 additions and 0 deletions

View File

@@ -39,6 +39,14 @@
(rule (simplify (imul ty (ineg ty x) (ineg ty y))) (rule (simplify (imul ty (ineg ty x) (ineg ty y)))
(subsume (imul ty x y))) (subsume (imul ty x y)))
;; iabs(ineg(x)) == iabs(x).
(rule (simplify (iabs ty (ineg ty x)))
(iabs ty x))
;; iabs(iabs(x)) == iabs(x).
(rule (simplify (iabs ty inner @ (iabs ty x)))
(subsume inner))
;; x-x == 0. ;; x-x == 0.
(rule (simplify (isub (fits_in_64 (ty_int ty)) x x)) (subsume (iconst ty (imm64 0)))) (rule (simplify (isub (fits_in_64 (ty_int ty)) x x)) (subsume (iconst ty (imm64 0))))

View File

@@ -242,6 +242,23 @@ block0(v0: i32, v1: i32):
; check: return v5 ; check: return v5
} }
function %iabs_ineg(i32) -> i32 {
block0(v0: i32):
v1 = ineg v0
v2 = iabs v1
return v2
; check: v3 = iabs v0
; check: return v3
}
function %iabs_iabs(i32) -> i32 {
block0(v0: i32):
v1 = iabs v0
v2 = iabs v1
return v2
; check: return v1
}
function %isub_self(i32) -> i32 { function %isub_self(i32) -> i32 {
block0(v0: i32): block0(v0: i32):
v1 = isub v0, v0 v1 = isub v0, v0