From 6df3bbbe606109b7ccaba1e12fcc35b2a248fa2a Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Mon, 13 Feb 2023 14:43:17 -0800 Subject: [PATCH] Cranelift: Collapse double extends into a single extend (#5772) --- cranelift/codegen/src/opts/algebraic.isle | 6 ++++++ .../filetests/filetests/egraph/algebraic.clif | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/cranelift/codegen/src/opts/algebraic.isle b/cranelift/codegen/src/opts/algebraic.isle index e227a40896..8193f7945e 100644 --- a/cranelift/codegen/src/opts/algebraic.isle +++ b/cranelift/codegen/src/opts/algebraic.isle @@ -6,6 +6,12 @@ ;; than a piece of the input or a new node that we construct; but we ;; can freely rewrite e.g. `x+y-y` to `x`. +;; Chained `uextend` and `sextend`. +(rule (simplify (uextend ty (uextend _intermediate_ty x))) + (uextend ty x)) +(rule (simplify (sextend ty (sextend _intermediate_ty x))) + (sextend ty x)) + ;; x+0 == 0+x == x. (rule (simplify (iadd ty x diff --git a/cranelift/filetests/filetests/egraph/algebraic.clif b/cranelift/filetests/filetests/egraph/algebraic.clif index af8062d6ad..3e8577cdbe 100644 --- a/cranelift/filetests/filetests/egraph/algebraic.clif +++ b/cranelift/filetests/filetests/egraph/algebraic.clif @@ -337,3 +337,23 @@ block0(v1: i32): ; check: v5 = iconst.i8 1 ; check: return v5 + +function %double_uextend(i16) -> i64 { +block0(v1: i16): + v2 = uextend.i32 v1 + v3 = uextend.i64 v2 + return v3 +} + +; check: v4 = uextend.i64 v1 +; check: return v4 + +function %double_sextend(i16) -> i64 { +block0(v1: i16): + v2 = sextend.i32 v1 + v3 = sextend.i64 v2 + return v3 +} + +; check: v4 = sextend.i64 v1 +; check: return v4