craneleft: cancel ineg when args to imul (#6053)

* craneleft: cancel `ineg`/`iabs` when args to `imul`

* Remove unsound `iabs(x) * iabs(y) == x*y` rewrite
This commit is contained in:
Karl Meakin
2023-03-17 19:41:20 +00:00
committed by GitHub
parent 2e48babf23
commit c3f5b71b6a
2 changed files with 14 additions and 0 deletions

View File

@@ -35,6 +35,10 @@
;; ineg(ineg(x)) == x.
(rule (simplify (ineg ty (ineg ty x))) (subsume x))
;; ineg(x) * ineg(y) == x*y.
(rule (simplify (imul ty (ineg ty x) (ineg ty y)))
(subsume (imul ty x y)))
;; x-x == 0.
(rule (simplify (isub (fits_in_64 (ty_int ty)) x x)) (subsume (iconst ty (imm64 0))))