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:
@@ -39,6 +39,14 @@
|
||||
(rule (simplify (imul ty (ineg ty x) (ineg ty 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.
|
||||
(rule (simplify (isub (fits_in_64 (ty_int ty)) x x)) (subsume (iconst ty (imm64 0))))
|
||||
|
||||
|
||||
@@ -242,6 +242,23 @@ block0(v0: i32, v1: i32):
|
||||
; 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 {
|
||||
block0(v0: i32):
|
||||
v1 = isub v0, v0
|
||||
|
||||
Reference in New Issue
Block a user