Cranelift: constant propagate shifts (#5671)

Thanks to Souper for pointing out we weren't doing this!
This commit is contained in:
Nick Fitzgerald
2023-01-31 12:06:53 -08:00
committed by GitHub
parent 10fcd14287
commit 7aa240e0f2
4 changed files with 80 additions and 0 deletions

View File

@@ -55,6 +55,21 @@
(iconst ty (u64_from_imm64 k))))
(subsume (iconst ty (imm64_masked ty (u64_not k)))))
(rule (simplify (ishl (fits_in_64 ty)
(iconst ty (u64_from_imm64 k1))
(iconst ty (u64_from_imm64 k2))))
(subsume (iconst ty (imm64_masked ty (u64_shl k1 k2)))))
(rule (simplify (ushr (fits_in_64 ty)
(iconst ty k1)
(iconst ty k2)))
(subsume (iconst ty (imm64_ushr ty k1 k2))))
(rule (simplify (sshr (fits_in_64 ty)
(iconst ty k1)
(iconst ty k2)))
(subsume (iconst ty (imm64_sshr ty k1 k2))))
;; Canonicalize via commutativity: push immediates to the right.
;;
;; (op k x) --> (op x k)