From 8f1a7773a39a4561420fb9079875f171e2f432e1 Mon Sep 17 00:00:00 2001 From: Chris Fallin Date: Mon, 10 Apr 2023 11:43:15 -0700 Subject: [PATCH] Revert "ISLE: rewrite loose inequalities to strict inequalities and strict inequalities to equalities (#6130)" (#6193) This reverts commit 57e42d0c46b8b461a23f29263942301c682bb3c8. Fixes #6185. --- cranelift/codegen/src/opts/icmp.isle | 40 - .../filetests/filetests/egraph/algebraic.clif | 4 +- .../filetests/filetests/egraph/cprop.clif | 16 +- .../filetests/egraph/icmp-parameterized.clif | 699 ++---------------- .../egraph/make-icmp-parameterized-tests.sh | 30 +- 5 files changed, 78 insertions(+), 711 deletions(-) diff --git a/cranelift/codegen/src/opts/icmp.isle b/cranelift/codegen/src/opts/icmp.isle index aef7cd499d..d48281adc5 100644 --- a/cranelift/codegen/src/opts/icmp.isle +++ b/cranelift/codegen/src/opts/icmp.isle @@ -47,36 +47,11 @@ (iconst _ (u64_from_imm64 1)))) extend) -;; Rewrite loose inequalities to strict inequalities: -;; ule(x, c) == ult(x, c+1), for c != UMAX. -(rule (simplify (ule (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 c)))) - (if-let $false (u64_eq c (ty_umax cty))) - (ult bty x (iconst cty (imm64 (u64_add c 1))))) - -;; uge(x, c) == ugt(x, c-1), for c != 0. -(rule (simplify (uge (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 c)))) - (if-let $false (u64_eq c 0)) - (ugt bty x (iconst cty (imm64 (u64_sub c 1))))) - -;; sle(x, c) == slt(x, c+1), for c != SMAX. -(rule (simplify (sle (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 c)))) - (if-let $false (u64_eq c (ty_smax cty))) - (slt bty x (iconst cty (imm64 (u64_add c 1))))) - -;; sge(x, c) == sgt(x, c-1), for c != SMIN. -(rule (simplify (sge (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 c)))) - (if-let $false (u64_eq c (ty_smin cty))) - (sgt bty x (iconst cty (imm64 (u64_sub c 1))))) - ;; Comparisons against largest/smallest signed/unsigned values: ;; ult(x, 0) == false. (rule (simplify (ult (fits_in_64 (ty_int bty)) x zero @ (iconst _ (u64_from_imm64 0)))) (subsume (iconst bty (imm64 0)))) -;; ult(x, 1) == eq(x, 0) -(rule (simplify (ult (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 0)))) - (eq bty x (iconst cty (imm64 0)))) - ;; ule(x, 0) == eq(x, 0) (rule (simplify (ule (fits_in_64 (ty_int bty)) x zero @ (iconst _ (u64_from_imm64 0)))) (eq bty x zero)) @@ -109,11 +84,6 @@ (if-let $true (u64_eq y (ty_umax cty))) (eq bty x umax)) -;; ugt(x, UMAX-1) == eq(x, UMAX). -(rule (simplify (ugt (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (u64_sub (ty_umax cty) 1))) - (eq bty x (iconst cty (imm64 (ty_umax cty))))) - ;; slt(x, SMIN) == false. (rule (simplify (slt (fits_in_64 (ty_int bty)) x smin @ (iconst cty (u64_from_imm64 y)))) (if-let $true (u64_eq y (ty_smin cty))) @@ -124,11 +94,6 @@ (if-let $true (u64_eq y (ty_smin cty))) (eq bty x smin)) -;; slt(x, SMIN+1) == eq(x, SMIN). -(rule (simplify (slt (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (u64_add (ty_smin cty) 1))) - (eq bty x (iconst cty (imm64 (ty_smin cty))))) - ;; sgt(x, SMIN) == ne(x, SMIN). (rule (simplify (sgt (fits_in_64 (ty_int bty)) x smin @ (iconst cty (u64_from_imm64 y)))) (if-let $true (u64_eq y (ty_smin cty))) @@ -159,11 +124,6 @@ (if-let $true (u64_eq y (ty_smax cty))) (eq bty x smax)) -;; sgt(x, SMAX-1) == eq(x, SMAX). -(rule (simplify (sgt (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (u64_sub (ty_smax cty) 1))) - (eq bty x (iconst cty (imm64 (ty_smax cty))))) - ;; `band`/`bor` of 2 comparisons: (rule (simplify (band ty (icmp ty cc1 x y) (icmp ty cc2 x y))) (if-let signed (intcc_comparable cc1 cc2)) diff --git a/cranelift/filetests/filetests/egraph/algebraic.clif b/cranelift/filetests/filetests/egraph/algebraic.clif index b31af79e93..faf5998e16 100644 --- a/cranelift/filetests/filetests/egraph/algebraic.clif +++ b/cranelift/filetests/filetests/egraph/algebraic.clif @@ -442,8 +442,8 @@ block0(v1: i32): return v4 } -; check: v7 = iconst.i8 1 -; check: return v7 +; check: v5 = iconst.i8 1 +; check: return v5 function %double_uextend(i16) -> i64 { block0(v1: i16): diff --git a/cranelift/filetests/filetests/egraph/cprop.clif b/cranelift/filetests/filetests/egraph/cprop.clif index 8e1fe569cc..dc781a79a9 100644 --- a/cranelift/filetests/filetests/egraph/cprop.clif +++ b/cranelift/filetests/filetests/egraph/cprop.clif @@ -162,8 +162,8 @@ block0: return v2 } -; check: v5 = iconst.i8 1 -; nextln: return v5 +; check: v3 = iconst.i8 1 +; nextln: return v3 function %icmp_uge_i32() -> i8 { block0: @@ -173,8 +173,8 @@ block0: return v2 } -; check: v4 = iconst.i8 0 -; nextln: return v4 +; check: v3 = iconst.i8 0 +; nextln: return v3 function %icmp_ugt_i32() -> i8 { block0: @@ -206,8 +206,8 @@ block0: return v2 } -; check: v5 = iconst.i8 1 -; nextln: return v5 +; check: v3 = iconst.i8 1 +; nextln: return v3 function %icmp_sge_i32() -> i8 { block0: @@ -217,8 +217,8 @@ block0: return v2 } -; check: v5 = iconst.i8 0 -; nextln: return v5 +; check: v3 = iconst.i8 0 +; nextln: return v3 function %icmp_sgt_i32() -> i8 { block0: diff --git a/cranelift/filetests/filetests/egraph/icmp-parameterized.clif b/cranelift/filetests/filetests/egraph/icmp-parameterized.clif index 315f424810..7c7c93083b 100644 --- a/cranelift/filetests/filetests/egraph/icmp-parameterized.clif +++ b/cranelift/filetests/filetests/egraph/icmp-parameterized.clif @@ -3,7 +3,7 @@ set opt_level=speed target x86_64 ;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -;; !!! GENERATED BY 'make-icmp-parameterized-tests.sh' DO NOT EDIT !!! +;; !!! GENERATED BY 'make-parameterized-icmp-tests.sh' DO NOT EDIT !!! ;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;; run with the 'CRANELIFT_TEST_BLESS=1' env var set to update this file @@ -137,6 +137,38 @@ block0(v0: i32): ; return v2 ; v2 = 1 ; } +function %mask_icmp_result(i64, i64) -> i8 { +block0(v1: i64, v2: i64): + v3 = icmp ult v1, v2 + v4 = iconst.i8 1 + v5 = band v3, v4 + return v5 +} + +; function %mask_icmp_result(i64, i64) -> i8 fast { +; block0(v1: i64, v2: i64): +; v3 = icmp ult v1, v2 +; v6 -> v3 +; return v3 +; } + +function %mask_icmp_extend_result(i64, i64) -> i64 { +block0(v1: i64, v2: i64): + v3 = icmp ult v1, v2 + v4 = uextend.i64 v3 + v5 = iconst.i64 1 + v6 = band v4, v5 + return v6 +} + +; function %mask_icmp_extend_result(i64, i64) -> i64 fast { +; block0(v1: i64, v2: i64): +; v3 = icmp ult v1, v2 +; v4 = uextend.i64 v3 +; v7 -> v4 +; return v4 +; } + function %icmp_eq_umin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0 @@ -151,20 +183,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_eq_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 1 - v2 = icmp eq v0, v1 - return v2 -} - -; function %icmp_eq_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 1 -; v2 = icmp eq v0, v1 ; v1 = 1 -; return v2 -; } - function %icmp_eq_umax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0xFFFF_FFFF @@ -179,20 +197,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_eq_umax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xFFFF_FFFE - v2 = icmp eq v0, v1 - return v2 -} - -; function %icmp_eq_umax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0xffff_fffe -; v2 = icmp eq v0, v1 ; v1 = 0xffff_fffe -; return v2 -; } - function %icmp_eq_smin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x8000_0000 @@ -207,20 +211,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_eq_smin_plus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0001 - v2 = icmp eq v0, v1 - return v2 -} - -; function %icmp_eq_smin_plus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0x8000_0001 -; v2 = icmp eq v0, v1 ; v1 = 0x8000_0001 -; return v2 -; } - function %icmp_eq_smax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x7FFF_FFFF @@ -235,20 +225,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_eq_smax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFE - v2 = icmp eq v0, v1 - return v2 -} - -; function %icmp_eq_smax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0x7fff_fffe -; v2 = icmp eq v0, v1 ; v1 = 0x7fff_fffe -; return v2 -; } - function %icmp_ne_umin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0 @@ -263,20 +239,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_ne_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 1 - v2 = icmp ne v0, v1 - return v2 -} - -; function %icmp_ne_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 1 -; v2 = icmp ne v0, v1 ; v1 = 1 -; return v2 -; } - function %icmp_ne_umax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0xFFFF_FFFF @@ -291,20 +253,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_ne_umax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xFFFF_FFFE - v2 = icmp ne v0, v1 - return v2 -} - -; function %icmp_ne_umax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0xffff_fffe -; v2 = icmp ne v0, v1 ; v1 = 0xffff_fffe -; return v2 -; } - function %icmp_ne_smin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x8000_0000 @@ -319,20 +267,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_ne_smin_plus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0001 - v2 = icmp ne v0, v1 - return v2 -} - -; function %icmp_ne_smin_plus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0x8000_0001 -; v2 = icmp ne v0, v1 ; v1 = 0x8000_0001 -; return v2 -; } - function %icmp_ne_smax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x7FFF_FFFF @@ -347,20 +281,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_ne_smax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFE - v2 = icmp ne v0, v1 - return v2 -} - -; function %icmp_ne_smax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0x7fff_fffe -; v2 = icmp ne v0, v1 ; v1 = 0x7fff_fffe -; return v2 -; } - function %icmp_ult_umin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0 @@ -374,20 +294,6 @@ block0(v0: i32): ; return v3 ; v3 = 0 ; } -function %icmp_ult_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 1 - v2 = icmp ult v0, v1 - return v2 -} - -; function %icmp_ult_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 1 -; v2 = icmp ult v0, v1 ; v1 = 1 -; return v2 -; } - function %icmp_ult_umax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0xFFFF_FFFF @@ -403,20 +309,6 @@ block0(v0: i32): ; return v3 ; } -function %icmp_ult_umax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xFFFF_FFFE - v2 = icmp ult v0, v1 - return v2 -} - -; function %icmp_ult_umax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0xffff_fffe -; v2 = icmp ult v0, v1 ; v1 = 0xffff_fffe -; return v2 -; } - function %icmp_ult_smin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x8000_0000 @@ -431,20 +323,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_ult_smin_plus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0001 - v2 = icmp ult v0, v1 - return v2 -} - -; function %icmp_ult_smin_plus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0x8000_0001 -; v2 = icmp ult v0, v1 ; v1 = 0x8000_0001 -; return v2 -; } - function %icmp_ult_smax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x7FFF_FFFF @@ -459,20 +337,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_ult_smax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFE - v2 = icmp ult v0, v1 - return v2 -} - -; function %icmp_ult_smax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0x7fff_fffe -; v2 = icmp ult v0, v1 ; v1 = 0x7fff_fffe -; return v2 -; } - function %icmp_ule_umin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0 @@ -483,24 +347,9 @@ block0(v0: i32): ; function %icmp_ule_umin(i32) -> i8 fast { ; block0(v0: i32): ; v1 = iconst.i32 0 -; v5 = icmp eq v0, v1 ; v1 = 0 -; v7 -> v5 -; return v5 -; } - -function %icmp_ule_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 1 - v2 = icmp ule v0, v1 - return v2 -} - -; function %icmp_ule_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 2 -; v4 = icmp ult v0, v3 ; v3 = 2 -; v5 -> v4 -; return v4 +; v3 = icmp eq v0, v1 ; v1 = 0 +; v4 -> v3 +; return v3 ; } function %icmp_ule_umax(i32) -> i8 { @@ -516,22 +365,6 @@ block0(v0: i32): ; return v3 ; v3 = 1 ; } -function %icmp_ule_umax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xFFFF_FFFE - v2 = icmp ule v0, v1 - return v2 -} - -; function %icmp_ule_umax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0xffff_ffff -; v5 = icmp ne v0, v3 ; v3 = 0xffff_ffff -; v6 -> v5 -; v7 -> v6 -; return v5 -; } - function %icmp_ule_smin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x8000_0000 @@ -541,25 +374,9 @@ block0(v0: i32): ; function %icmp_ule_smin(i32) -> i8 fast { ; block0(v0: i32): -; v3 = iconst.i32 0x8000_0001 -; v4 = icmp ult v0, v3 ; v3 = 0x8000_0001 -; v5 -> v4 -; return v4 -; } - -function %icmp_ule_smin_plus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0001 - v2 = icmp ule v0, v1 - return v2 -} - -; function %icmp_ule_smin_plus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0x8000_0002 -; v4 = icmp ult v0, v3 ; v3 = 0x8000_0002 -; v5 -> v4 -; return v4 +; v1 = iconst.i32 0x8000_0000 +; v2 = icmp ule v0, v1 ; v1 = 0x8000_0000 +; return v2 ; } function %icmp_ule_smax(i32) -> i8 { @@ -571,25 +388,9 @@ block0(v0: i32): ; function %icmp_ule_smax(i32) -> i8 fast { ; block0(v0: i32): -; v3 = iconst.i32 0x8000_0000 -; v4 = icmp ult v0, v3 ; v3 = 0x8000_0000 -; v5 -> v4 -; return v4 -; } - -function %icmp_ule_smax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFE - v2 = icmp ule v0, v1 - return v2 -} - -; function %icmp_ule_smax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0x7fff_ffff -; v4 = icmp ult v0, v3 ; v3 = 0x7fff_ffff -; v5 -> v4 -; return v4 +; v1 = iconst.i32 0x7fff_ffff +; v2 = icmp ule v0, v1 ; v1 = 0x7fff_ffff +; return v2 ; } function %icmp_ugt_umin(i32) -> i8 { @@ -607,20 +408,6 @@ block0(v0: i32): ; return v3 ; } -function %icmp_ugt_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 1 - v2 = icmp ugt v0, v1 - return v2 -} - -; function %icmp_ugt_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 1 -; v2 = icmp ugt v0, v1 ; v1 = 1 -; return v2 -; } - function %icmp_ugt_umax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0xFFFF_FFFF @@ -634,21 +421,6 @@ block0(v0: i32): ; return v3 ; v3 = 0 ; } -function %icmp_ugt_umax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xFFFF_FFFE - v2 = icmp ugt v0, v1 - return v2 -} - -; function %icmp_ugt_umax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0xffff_ffff -; v4 = icmp eq v0, v3 ; v3 = 0xffff_ffff -; v5 -> v4 -; return v4 -; } - function %icmp_ugt_smin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x8000_0000 @@ -663,20 +435,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_ugt_smin_plus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0001 - v2 = icmp ugt v0, v1 - return v2 -} - -; function %icmp_ugt_smin_plus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0x8000_0001 -; v2 = icmp ugt v0, v1 ; v1 = 0x8000_0001 -; return v2 -; } - function %icmp_ugt_smax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x7FFF_FFFF @@ -691,20 +449,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_ugt_smax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFE - v2 = icmp ugt v0, v1 - return v2 -} - -; function %icmp_ugt_smax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0x7fff_fffe -; v2 = icmp ugt v0, v1 ; v1 = 0x7fff_fffe -; return v2 -; } - function %icmp_uge_umin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0 @@ -718,22 +462,6 @@ block0(v0: i32): ; return v3 ; v3 = 1 ; } -function %icmp_uge_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 1 - v2 = icmp uge v0, v1 - return v2 -} - -; function %icmp_uge_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0 -; v5 = icmp ne v0, v3 ; v3 = 0 -; v6 -> v5 -; v7 -> v6 -; return v5 -; } - function %icmp_uge_umax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0xFFFF_FFFF @@ -745,27 +473,10 @@ block0(v0: i32): ; block0(v0: i32): ; v1 = iconst.i32 0xffff_ffff ; v3 = icmp eq v0, v1 ; v1 = 0xffff_ffff -; v6 -> v3 -; v7 -> v3 -; v8 -> v6 +; v4 -> v3 ; return v3 ; } -function %icmp_uge_umax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xFFFF_FFFE - v2 = icmp uge v0, v1 - return v2 -} - -; function %icmp_uge_umax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0xffff_fffd -; v4 = icmp ugt v0, v3 ; v3 = 0xffff_fffd -; v5 -> v4 -; return v4 -; } - function %icmp_uge_smin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x8000_0000 @@ -775,25 +486,9 @@ block0(v0: i32): ; function %icmp_uge_smin(i32) -> i8 fast { ; block0(v0: i32): -; v3 = iconst.i32 0x7fff_ffff -; v4 = icmp ugt v0, v3 ; v3 = 0x7fff_ffff -; v5 -> v4 -; return v4 -; } - -function %icmp_uge_smin_plus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0001 - v2 = icmp uge v0, v1 - return v2 -} - -; function %icmp_uge_smin_plus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0x8000_0000 -; v4 = icmp ugt v0, v3 ; v3 = 0x8000_0000 -; v5 -> v4 -; return v4 +; v1 = iconst.i32 0x8000_0000 +; v2 = icmp uge v0, v1 ; v1 = 0x8000_0000 +; return v2 ; } function %icmp_uge_smax(i32) -> i8 { @@ -805,25 +500,9 @@ block0(v0: i32): ; function %icmp_uge_smax(i32) -> i8 fast { ; block0(v0: i32): -; v3 = iconst.i32 0x7fff_fffe -; v4 = icmp ugt v0, v3 ; v3 = 0x7fff_fffe -; v5 -> v4 -; return v4 -; } - -function %icmp_uge_smax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFE - v2 = icmp uge v0, v1 - return v2 -} - -; function %icmp_uge_smax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0x7fff_fffd -; v4 = icmp ugt v0, v3 ; v3 = 0x7fff_fffd -; v5 -> v4 -; return v4 +; v1 = iconst.i32 0x7fff_ffff +; v2 = icmp uge v0, v1 ; v1 = 0x7fff_ffff +; return v2 ; } function %icmp_slt_umin(i32) -> i8 { @@ -840,20 +519,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_slt_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 1 - v2 = icmp slt v0, v1 - return v2 -} - -; function %icmp_slt_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 1 -; v2 = icmp slt v0, v1 ; v1 = 1 -; return v2 -; } - function %icmp_slt_umax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0xFFFF_FFFF @@ -868,20 +533,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_slt_umax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xFFFF_FFFE - v2 = icmp slt v0, v1 - return v2 -} - -; function %icmp_slt_umax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0xffff_fffe -; v2 = icmp slt v0, v1 ; v1 = 0xffff_fffe -; return v2 -; } - function %icmp_slt_smin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x8000_0000 @@ -895,21 +546,6 @@ block0(v0: i32): ; return v3 ; v3 = 0 ; } -function %icmp_slt_smin_plus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0001 - v2 = icmp slt v0, v1 - return v2 -} - -; function %icmp_slt_smin_plus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0x8000_0000 -; v4 = icmp eq v0, v3 ; v3 = 0x8000_0000 -; v5 -> v4 -; return v4 -; } - function %icmp_slt_smax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x7FFF_FFFF @@ -925,20 +561,6 @@ block0(v0: i32): ; return v3 ; } -function %icmp_slt_smax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFE - v2 = icmp slt v0, v1 - return v2 -} - -; function %icmp_slt_smax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0x7fff_fffe -; v2 = icmp slt v0, v1 ; v1 = 0x7fff_fffe -; return v2 -; } - function %icmp_sle_umin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0 @@ -948,25 +570,9 @@ block0(v0: i32): ; function %icmp_sle_umin(i32) -> i8 fast { ; block0(v0: i32): -; v3 = iconst.i32 1 -; v4 = icmp slt v0, v3 ; v3 = 1 -; v5 -> v4 -; return v4 -; } - -function %icmp_sle_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 1 - v2 = icmp sle v0, v1 - return v2 -} - -; function %icmp_sle_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 2 -; v4 = icmp slt v0, v3 ; v3 = 2 -; v5 -> v4 -; return v4 +; v1 = iconst.i32 0 +; v2 = icmp sle v0, v1 ; v1 = 0 +; return v2 ; } function %icmp_sle_umax(i32) -> i8 { @@ -978,25 +584,9 @@ block0(v0: i32): ; function %icmp_sle_umax(i32) -> i8 fast { ; block0(v0: i32): -; v3 = iconst.i32 0x0001_0000_0000 -; v4 = icmp slt v0, v3 ; v3 = 0x0001_0000_0000 -; v5 -> v4 -; return v4 -; } - -function %icmp_sle_umax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xFFFF_FFFE - v2 = icmp sle v0, v1 - return v2 -} - -; function %icmp_sle_umax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0xffff_ffff -; v4 = icmp slt v0, v3 ; v3 = 0xffff_ffff -; v5 -> v4 -; return v4 +; v1 = iconst.i32 0xffff_ffff +; v2 = icmp sle v0, v1 ; v1 = 0xffff_ffff +; return v2 ; } function %icmp_sle_smin(i32) -> i8 { @@ -1009,26 +599,9 @@ block0(v0: i32): ; function %icmp_sle_smin(i32) -> i8 fast { ; block0(v0: i32): ; v1 = iconst.i32 0x8000_0000 -; v5 = icmp eq v0, v1 ; v1 = 0x8000_0000 -; v6 -> v5 -; v8 -> v5 -; v7 -> v6 -; return v5 -; } - -function %icmp_sle_smin_plus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0001 - v2 = icmp sle v0, v1 - return v2 -} - -; function %icmp_sle_smin_plus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0x8000_0002 -; v4 = icmp slt v0, v3 ; v3 = 0x8000_0002 -; v5 -> v4 -; return v4 +; v3 = icmp eq v0, v1 ; v1 = 0x8000_0000 +; v4 -> v3 +; return v3 ; } function %icmp_sle_smax(i32) -> i8 { @@ -1044,22 +617,6 @@ block0(v0: i32): ; return v3 ; v3 = 1 ; } -function %icmp_sle_smax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFE - v2 = icmp sle v0, v1 - return v2 -} - -; function %icmp_sle_smax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0x7fff_ffff -; v5 = icmp ne v0, v3 ; v3 = 0x7fff_ffff -; v6 -> v5 -; v7 -> v6 -; return v5 -; } - function %icmp_sgt_umin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0 @@ -1074,20 +631,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_sgt_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 1 - v2 = icmp sgt v0, v1 - return v2 -} - -; function %icmp_sgt_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 1 -; v2 = icmp sgt v0, v1 ; v1 = 1 -; return v2 -; } - function %icmp_sgt_umax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0xFFFF_FFFF @@ -1102,20 +645,6 @@ block0(v0: i32): ; return v2 ; } -function %icmp_sgt_umax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xFFFF_FFFE - v2 = icmp sgt v0, v1 - return v2 -} - -; function %icmp_sgt_umax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0xffff_fffe -; v2 = icmp sgt v0, v1 ; v1 = 0xffff_fffe -; return v2 -; } - function %icmp_sgt_smin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x8000_0000 @@ -1131,20 +660,6 @@ block0(v0: i32): ; return v3 ; } -function %icmp_sgt_smin_plus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0001 - v2 = icmp sgt v0, v1 - return v2 -} - -; function %icmp_sgt_smin_plus_1(i32) -> i8 fast { -; block0(v0: i32): -; v1 = iconst.i32 0x8000_0001 -; v2 = icmp sgt v0, v1 ; v1 = 0x8000_0001 -; return v2 -; } - function %icmp_sgt_smax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x7FFF_FFFF @@ -1158,21 +673,6 @@ block0(v0: i32): ; return v3 ; v3 = 0 ; } -function %icmp_sgt_smax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFE - v2 = icmp sgt v0, v1 - return v2 -} - -; function %icmp_sgt_smax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0x7fff_ffff -; v4 = icmp eq v0, v3 ; v3 = 0x7fff_ffff -; v5 -> v4 -; return v4 -; } - function %icmp_sge_umin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0 @@ -1182,25 +682,9 @@ block0(v0: i32): ; function %icmp_sge_umin(i32) -> i8 fast { ; block0(v0: i32): -; v3 = iconst.i32 -1 -; v4 = icmp sgt v0, v3 ; v3 = -1 -; v5 -> v4 -; return v4 -; } - -function %icmp_sge_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 1 - v2 = icmp sge v0, v1 - return v2 -} - -; function %icmp_sge_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0 -; v4 = icmp sgt v0, v3 ; v3 = 0 -; v5 -> v4 -; return v4 +; v1 = iconst.i32 0 +; v2 = icmp sge v0, v1 ; v1 = 0 +; return v2 ; } function %icmp_sge_umax(i32) -> i8 { @@ -1212,25 +696,9 @@ block0(v0: i32): ; function %icmp_sge_umax(i32) -> i8 fast { ; block0(v0: i32): -; v3 = iconst.i32 0xffff_fffe -; v4 = icmp sgt v0, v3 ; v3 = 0xffff_fffe -; v5 -> v4 -; return v4 -; } - -function %icmp_sge_umax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xFFFF_FFFE - v2 = icmp sge v0, v1 - return v2 -} - -; function %icmp_sge_umax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0xffff_fffd -; v4 = icmp sgt v0, v3 ; v3 = 0xffff_fffd -; v5 -> v4 -; return v4 +; v1 = iconst.i32 0xffff_ffff +; v2 = icmp sge v0, v1 ; v1 = 0xffff_ffff +; return v2 ; } function %icmp_sge_smin(i32) -> i8 { @@ -1246,22 +714,6 @@ block0(v0: i32): ; return v3 ; v3 = 1 ; } -function %icmp_sge_smin_plus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0001 - v2 = icmp sge v0, v1 - return v2 -} - -; function %icmp_sge_smin_plus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0x8000_0000 -; v5 = icmp ne v0, v3 ; v3 = 0x8000_0000 -; v6 -> v5 -; v7 -> v6 -; return v5 -; } - function %icmp_sge_smax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x7FFF_FFFF @@ -1272,26 +724,9 @@ block0(v0: i32): ; function %icmp_sge_smax(i32) -> i8 fast { ; block0(v0: i32): ; v1 = iconst.i32 0x7fff_ffff -; v5 = icmp eq v0, v1 ; v1 = 0x7fff_ffff -; v6 -> v5 -; v8 -> v5 -; v7 -> v6 -; return v5 -; } - -function %icmp_sge_smax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFE - v2 = icmp sge v0, v1 - return v2 -} - -; function %icmp_sge_smax_minus_1(i32) -> i8 fast { -; block0(v0: i32): -; v3 = iconst.i32 0x7fff_fffd -; v4 = icmp sgt v0, v3 ; v3 = 0x7fff_fffd -; v5 -> v4 -; return v4 +; v3 = icmp eq v0, v1 ; v1 = 0x7fff_ffff +; v4 -> v3 +; return v3 ; } function %icmp_and_eq_eq(i32, i32) -> i8 { diff --git a/cranelift/filetests/filetests/egraph/make-icmp-parameterized-tests.sh b/cranelift/filetests/filetests/egraph/make-icmp-parameterized-tests.sh index 1b495080a2..ab6e541753 100755 --- a/cranelift/filetests/filetests/egraph/make-icmp-parameterized-tests.sh +++ b/cranelift/filetests/filetests/egraph/make-icmp-parameterized-tests.sh @@ -2,7 +2,7 @@ set -e cd $(dirname "$0") -out=icmp-parameterized.clif +out=parameterized-icmp.clif CCS="eq ne ult ule ugt uge slt sle sgt sge" function main { @@ -42,13 +42,6 @@ block0(v0: i32): return v2 } -function %icmp_${cc}_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 1 - v2 = icmp ${cc} v0, v1 - return v2 -} - function %icmp_${cc}_umax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0xFFFF_FFFF @@ -56,13 +49,6 @@ block0(v0: i32): return v2 } -function %icmp_${cc}_umax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xFFFF_FFFE - v2 = icmp ${cc} v0, v1 - return v2 -} - function %icmp_${cc}_smin(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x8000_0000 @@ -70,13 +56,6 @@ block0(v0: i32): return v2 } -function %icmp_${cc}_smin_plus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0001 - v2 = icmp ${cc} v0, v1 - return v2 -} - function %icmp_${cc}_smax(i32) -> i8 { block0(v0: i32): v1 = iconst.i32 0x7FFF_FFFF @@ -84,13 +63,6 @@ block0(v0: i32): return v2 } -function %icmp_${cc}_smax_minus_1(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFE - v2 = icmp ${cc} v0, v1 - return v2 -} - EOF done