From dcf0ea9ff367034a43e65552e2a30d0ba8cbd95e Mon Sep 17 00:00:00 2001 From: Karl Meakin Date: Wed, 29 Mar 2023 01:13:27 +0100 Subject: [PATCH] ISLE: rewrite `and`/`or` of `icmp` (#6095) * ISLE: rewrite `and`/`or` of `icmp` * Add `make-icmp-tests.sh` script * Remove unused changes --- cranelift/codegen/src/opts/algebraic.isle | 50 + .../filetests/filetests/egraph/icmp.clif | 3010 +++++++++++++++++ .../filetests/egraph/make-icmp-tests.sh | 38 + 3 files changed, 3098 insertions(+) create mode 100644 cranelift/filetests/filetests/egraph/icmp.clif create mode 100755 cranelift/filetests/filetests/egraph/make-icmp-tests.sh diff --git a/cranelift/codegen/src/opts/algebraic.isle b/cranelift/codegen/src/opts/algebraic.isle index 8cab77bd44..db3d8d4b48 100644 --- a/cranelift/codegen/src/opts/algebraic.isle +++ b/cranelift/codegen/src/opts/algebraic.isle @@ -479,6 +479,56 @@ (iconst _ (u64_from_imm64 0)))) (iconst ty (imm64 1))) +(decl pure decompose_intcc (IntCC) u64) +(rule (decompose_intcc (IntCC.Equal)) 1) +(rule (decompose_intcc (IntCC.UnsignedLessThan)) 2) +(rule (decompose_intcc (IntCC.SignedLessThan)) 2) +(rule (decompose_intcc (IntCC.UnsignedLessThanOrEqual)) 3) +(rule (decompose_intcc (IntCC.SignedLessThanOrEqual)) 3) +(rule (decompose_intcc (IntCC.UnsignedGreaterThan)) 4) +(rule (decompose_intcc (IntCC.SignedGreaterThan)) 4) +(rule (decompose_intcc (IntCC.UnsignedGreaterThanOrEqual)) 5) +(rule (decompose_intcc (IntCC.SignedGreaterThanOrEqual)) 5) +(rule (decompose_intcc (IntCC.NotEqual)) 6) + +(decl compose_icmp (Type u64 bool Value Value) Value) +(rule (compose_icmp ty 0 _ _ _) (subsume (iconst ty (imm64 0)))) +(rule (compose_icmp ty 1 _ x y) (icmp ty (IntCC.Equal) x y)) +(rule (compose_icmp ty 2 $false x y) (icmp ty (IntCC.UnsignedLessThan) x y)) +(rule (compose_icmp ty 2 $true x y) (icmp ty (IntCC.SignedLessThan) x y)) +(rule (compose_icmp ty 3 $false x y) (icmp ty (IntCC.UnsignedLessThanOrEqual) x y)) +(rule (compose_icmp ty 3 $true x y) (icmp ty (IntCC.SignedLessThanOrEqual) x y)) +(rule (compose_icmp ty 4 $false x y) (icmp ty (IntCC.UnsignedGreaterThan) x y)) +(rule (compose_icmp ty 4 $true x y) (icmp ty (IntCC.SignedGreaterThan) x y)) +(rule (compose_icmp ty 5 $false x y) (icmp ty (IntCC.UnsignedGreaterThanOrEqual) x y)) +(rule (compose_icmp ty 5 $true x y) (icmp ty (IntCC.SignedGreaterThanOrEqual) x y)) +(rule (compose_icmp ty 6 _ x y) (icmp ty (IntCC.NotEqual) x y)) +(rule (compose_icmp ty 7 _ _ _) (subsume (iconst ty (imm64 1)))) + +(decl pure intcc_class (IntCC) u64) +(rule (intcc_class (IntCC.UnsignedLessThan)) 1) +(rule (intcc_class (IntCC.UnsignedLessThanOrEqual)) 1) +(rule (intcc_class (IntCC.UnsignedGreaterThan)) 1) +(rule (intcc_class (IntCC.UnsignedGreaterThanOrEqual)) 1) +(rule (intcc_class (IntCC.SignedLessThan)) 2) +(rule (intcc_class (IntCC.SignedLessThanOrEqual)) 2) +(rule (intcc_class (IntCC.SignedGreaterThan)) 2) +(rule (intcc_class (IntCC.SignedGreaterThanOrEqual)) 2) +(rule (intcc_class (IntCC.Equal)) 3) +(rule (intcc_class (IntCC.NotEqual)) 3) + +(decl pure partial intcc_comparable (IntCC IntCC) bool) +(rule (intcc_comparable x y) + (if-let (u64_nonzero class) (u64_and (intcc_class x) (intcc_class y))) + (u64_eq 2 class)) + +(rule (simplify (band ty (icmp ty cc1 x y) (icmp ty cc2 x y))) + (if-let signed (intcc_comparable cc1 cc2)) + (compose_icmp ty (u64_and (decompose_intcc cc1) (decompose_intcc cc2)) signed x y)) + +(rule (simplify (bor ty (icmp ty cc1 x y) (icmp ty cc2 x y))) + (if-let signed (intcc_comparable cc1 cc2)) + (compose_icmp ty (u64_or (decompose_intcc cc1) (decompose_intcc cc2)) signed x y)) ;; Transform select-of-icmp into {u,s}{min,max} instructions where possible. (rule (simplify (select ty (sgt _ x y) x y)) (smax ty x y)) diff --git a/cranelift/filetests/filetests/egraph/icmp.clif b/cranelift/filetests/filetests/egraph/icmp.clif new file mode 100644 index 0000000000..0f10e4062b --- /dev/null +++ b/cranelift/filetests/filetests/egraph/icmp.clif @@ -0,0 +1,3010 @@ +test optimize precise-output +set opt_level=speed +set use_egraphs=true +target x86_64 + +;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +;; !!! GENERATED BY 'make-icmp-tests.sh' DO NOT EDIT !!! +;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +;; run with the 'CRANELIFT_TEST_BLESS=1' env var set to update this file + +function %icmp_and_eq_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp eq v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_eq_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp eq v0, v1 +; return v2 +; } + +function %icmp_and_eq_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp ne v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_eq_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_eq_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp ult v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_eq_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_eq_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp ule v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_eq_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp eq v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_eq_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp ugt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_eq_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_eq_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp uge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_eq_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp eq v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_eq_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp slt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_eq_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_eq_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp sle v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_eq_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp eq v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_eq_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp sgt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_eq_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_eq_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp sge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_eq_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp eq v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ne_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp eq v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ne_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_ne_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp ne v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ne_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ne v0, v1 +; return v2 +; } + +function %icmp_and_ne_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp ult v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ne_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ult v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ne_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp ule v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ne_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ult v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ne_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp ugt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ne_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ugt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ne_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp uge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ne_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ugt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ne_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp slt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ne_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp slt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ne_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp sle v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ne_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp slt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ne_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp sgt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ne_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sgt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ne_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp sge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ne_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sgt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ult_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp eq v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ult_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_ult_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp ne v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ult_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ult v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ult_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp ult v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ult_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ult v0, v1 +; return v2 +; } + +function %icmp_and_ult_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp ule v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ult_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ult v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ult_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp ugt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ult_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_ult_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp uge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ult_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_ult_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp slt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ult_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ult v0, v1 +; v3 = icmp slt v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_ult_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp sle v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ult_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ult v0, v1 +; v3 = icmp sle v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_ult_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp sgt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ult_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ult v0, v1 +; v3 = icmp sgt v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_ult_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp sge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ult_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ult v0, v1 +; v3 = icmp sge v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_ule_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp eq v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ule_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp eq v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ule_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp ne v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ule_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ult v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ule_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp ult v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ule_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ult v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ule_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp ule v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ule_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ule v0, v1 +; return v2 +; } + +function %icmp_and_ule_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp ugt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ule_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_ule_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp uge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ule_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp eq v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ule_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp slt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ule_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ule v0, v1 +; v3 = icmp slt v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_ule_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp sle v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ule_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ule v0, v1 +; v3 = icmp sle v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_ule_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp sgt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ule_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ule v0, v1 +; v3 = icmp sgt v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_ule_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp sge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ule_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ule v0, v1 +; v3 = icmp sge v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_ugt_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp eq v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ugt_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_ugt_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp ne v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ugt_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ugt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ugt_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp ult v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ugt_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_ugt_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp ule v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ugt_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_ugt_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp ugt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ugt_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ugt v0, v1 +; return v2 +; } + +function %icmp_and_ugt_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp uge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ugt_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ugt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_ugt_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp slt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ugt_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ugt v0, v1 +; v3 = icmp slt v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_ugt_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp sle v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ugt_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ugt v0, v1 +; v3 = icmp sle v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_ugt_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp sgt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ugt_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ugt v0, v1 +; v3 = icmp sgt v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_ugt_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp sge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_ugt_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ugt v0, v1 +; v3 = icmp sge v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_uge_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp eq v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_uge_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp eq v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_uge_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp ne v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_uge_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ugt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_uge_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp ult v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_uge_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_uge_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp ule v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_uge_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp eq v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_uge_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp ugt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_uge_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ugt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_uge_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp uge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_uge_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp uge v0, v1 +; return v2 +; } + +function %icmp_and_uge_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp slt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_uge_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp uge v0, v1 +; v3 = icmp slt v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_uge_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp sle v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_uge_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp uge v0, v1 +; v3 = icmp sle v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_uge_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp sgt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_uge_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp uge v0, v1 +; v3 = icmp sgt v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_uge_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp sge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_uge_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp uge v0, v1 +; v3 = icmp sge v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_slt_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp eq v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_slt_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_slt_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp ne v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_slt_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp slt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_slt_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp ult v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_slt_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp slt v0, v1 +; v3 = icmp ult v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_slt_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp ule v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_slt_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp slt v0, v1 +; v3 = icmp ule v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_slt_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp ugt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_slt_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp slt v0, v1 +; v3 = icmp ugt v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_slt_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp uge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_slt_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp slt v0, v1 +; v3 = icmp uge v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_slt_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp slt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_slt_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp slt v0, v1 +; return v2 +; } + +function %icmp_and_slt_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp sle v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_slt_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp slt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_slt_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp sgt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_slt_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_slt_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp sge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_slt_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_sle_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp eq v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sle_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp eq v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_sle_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp ne v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sle_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp slt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_sle_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp ult v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sle_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sle v0, v1 +; v3 = icmp ult v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_sle_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp ule v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sle_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sle v0, v1 +; v3 = icmp ule v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_sle_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp ugt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sle_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sle v0, v1 +; v3 = icmp ugt v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_sle_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp uge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sle_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sle v0, v1 +; v3 = icmp uge v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_sle_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp slt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sle_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp slt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_sle_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp sle v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sle_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sle v0, v1 +; return v2 +; } + +function %icmp_and_sle_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp sgt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sle_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_sle_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp sge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sle_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp eq v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_sgt_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp eq v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sgt_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_sgt_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp ne v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sgt_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sgt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_sgt_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp ult v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sgt_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sgt v0, v1 +; v3 = icmp ult v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_sgt_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp ule v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sgt_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sgt v0, v1 +; v3 = icmp ule v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_sgt_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp ugt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sgt_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sgt v0, v1 +; v3 = icmp ugt v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_sgt_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp uge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sgt_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sgt v0, v1 +; v3 = icmp uge v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_sgt_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp slt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sgt_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_sgt_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp sle v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sgt_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_sgt_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp sgt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sgt_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sgt v0, v1 +; return v2 +; } + +function %icmp_and_sgt_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp sge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sgt_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sgt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_sge_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp eq v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sge_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp eq v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_sge_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp ne v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sge_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sgt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_sge_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp ult v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sge_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sge v0, v1 +; v3 = icmp ult v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_sge_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp ule v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sge_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sge v0, v1 +; v3 = icmp ule v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_sge_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp ugt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sge_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sge v0, v1 +; v3 = icmp ugt v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_sge_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp uge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sge_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sge v0, v1 +; v3 = icmp uge v0, v1 +; v4 = band v2, v3 +; return v4 +; } + +function %icmp_and_sge_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp slt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sge_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 0 +; return v5 ; v5 = 0 +; } + +function %icmp_and_sge_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp sle v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sge_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp eq v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_sge_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp sgt v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sge_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sgt v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_and_sge_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp sge v0, v1 + v4 = band v2, v3 + return v4 +} + +; function %icmp_and_sge_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sge v0, v1 +; return v2 +; } + +function %icmp_or_eq_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp eq v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_eq_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp eq v0, v1 +; return v2 +; } + +function %icmp_or_eq_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp ne v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_eq_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_eq_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp ult v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_eq_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ule v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_eq_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp ule v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_eq_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ule v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_eq_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp ugt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_eq_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp uge v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_eq_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp uge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_eq_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp uge v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_eq_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp slt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_eq_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sle v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_eq_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp sle v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_eq_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sle v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_eq_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp sgt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_eq_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sge v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_eq_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp eq v0, v1 + v3 = icmp sge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_eq_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sge v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ne_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp eq v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ne_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_ne_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp ne v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ne_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ne v0, v1 +; return v2 +; } + +function %icmp_or_ne_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp ult v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ne_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ne v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ne_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp ule v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ne_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_ne_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp ugt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ne_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ne v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ne_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp uge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ne_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_ne_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp slt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ne_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ne v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ne_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp sle v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ne_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_ne_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp sgt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ne_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ne v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ne_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ne v0, v1 + v3 = icmp sge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ne_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_ult_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp eq v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ult_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ule v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ult_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp ne v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ult_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ne v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ult_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp ult v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ult_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ult v0, v1 +; return v2 +; } + +function %icmp_or_ult_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp ule v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ult_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ule v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ult_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp ugt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ult_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ne v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ult_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp uge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ult_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_ult_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp slt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ult_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ult v0, v1 +; v3 = icmp slt v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_ult_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp sle v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ult_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ult v0, v1 +; v3 = icmp sle v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_ult_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp sgt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ult_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ult v0, v1 +; v3 = icmp sgt v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_ult_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ult v0, v1 + v3 = icmp sge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ult_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ult v0, v1 +; v3 = icmp sge v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_ule_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp eq v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ule_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ule v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ule_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp ne v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ule_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_ule_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp ult v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ule_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ule v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ule_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp ule v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ule_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ule v0, v1 +; return v2 +; } + +function %icmp_or_ule_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp ugt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ule_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_ule_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp uge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ule_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_ule_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp slt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ule_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ule v0, v1 +; v3 = icmp slt v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_ule_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp sle v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ule_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ule v0, v1 +; v3 = icmp sle v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_ule_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp sgt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ule_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ule v0, v1 +; v3 = icmp sgt v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_ule_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ule v0, v1 + v3 = icmp sge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ule_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ule v0, v1 +; v3 = icmp sge v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_ugt_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp eq v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ugt_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp uge v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ugt_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp ne v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ugt_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ne v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ugt_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp ult v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ugt_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ne v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ugt_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp ule v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ugt_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_ugt_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp ugt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ugt_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ugt v0, v1 +; return v2 +; } + +function %icmp_or_ugt_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp uge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ugt_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp uge v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_ugt_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp slt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ugt_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ugt v0, v1 +; v3 = icmp slt v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_ugt_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp sle v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ugt_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ugt v0, v1 +; v3 = icmp sle v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_ugt_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp sgt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ugt_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ugt v0, v1 +; v3 = icmp sgt v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_ugt_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ugt v0, v1 + v3 = icmp sge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_ugt_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp ugt v0, v1 +; v3 = icmp sge v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_uge_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp eq v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_uge_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp uge v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_uge_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp ne v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_uge_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_uge_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp ult v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_uge_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_uge_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp ule v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_uge_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_uge_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp ugt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_uge_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp uge v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_uge_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp uge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_uge_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp uge v0, v1 +; return v2 +; } + +function %icmp_or_uge_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp slt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_uge_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp uge v0, v1 +; v3 = icmp slt v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_uge_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp sle v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_uge_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp uge v0, v1 +; v3 = icmp sle v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_uge_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp sgt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_uge_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp uge v0, v1 +; v3 = icmp sgt v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_uge_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp uge v0, v1 + v3 = icmp sge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_uge_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp uge v0, v1 +; v3 = icmp sge v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_slt_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp eq v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_slt_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sle v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_slt_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp ne v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_slt_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ne v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_slt_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp ult v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_slt_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp slt v0, v1 +; v3 = icmp ult v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_slt_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp ule v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_slt_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp slt v0, v1 +; v3 = icmp ule v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_slt_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp ugt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_slt_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp slt v0, v1 +; v3 = icmp ugt v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_slt_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp uge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_slt_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp slt v0, v1 +; v3 = icmp uge v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_slt_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp slt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_slt_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp slt v0, v1 +; return v2 +; } + +function %icmp_or_slt_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp sle v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_slt_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sle v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_slt_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp sgt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_slt_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ne v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_slt_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp slt v0, v1 + v3 = icmp sge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_slt_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_sle_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp eq v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sle_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sle v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_sle_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp ne v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sle_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_sle_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp ult v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sle_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sle v0, v1 +; v3 = icmp ult v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_sle_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp ule v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sle_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sle v0, v1 +; v3 = icmp ule v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_sle_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp ugt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sle_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sle v0, v1 +; v3 = icmp ugt v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_sle_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp uge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sle_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sle v0, v1 +; v3 = icmp uge v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_sle_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp slt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sle_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sle v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_sle_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp sle v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sle_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sle v0, v1 +; return v2 +; } + +function %icmp_or_sle_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp sgt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sle_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_sle_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sle v0, v1 + v3 = icmp sge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sle_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_sgt_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp eq v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sgt_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sge v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_sgt_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp ne v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sgt_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ne v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_sgt_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp ult v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sgt_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sgt v0, v1 +; v3 = icmp ult v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_sgt_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp ule v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sgt_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sgt v0, v1 +; v3 = icmp ule v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_sgt_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp ugt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sgt_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sgt v0, v1 +; v3 = icmp ugt v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_sgt_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp uge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sgt_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sgt v0, v1 +; v3 = icmp uge v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_sgt_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp slt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sgt_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp ne v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_sgt_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp sle v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sgt_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_sgt_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp sgt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sgt_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sgt v0, v1 +; return v2 +; } + +function %icmp_or_sgt_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sgt v0, v1 + v3 = icmp sge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sgt_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sge v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_sge_eq(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp eq v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sge_eq(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sge v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_sge_ne(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp ne v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sge_ne(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_sge_ult(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp ult v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sge_ult(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sge v0, v1 +; v3 = icmp ult v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_sge_ule(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp ule v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sge_ule(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sge v0, v1 +; v3 = icmp ule v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_sge_ugt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp ugt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sge_ugt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sge v0, v1 +; v3 = icmp ugt v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_sge_uge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp uge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sge_uge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sge v0, v1 +; v3 = icmp uge v0, v1 +; v4 = bor v2, v3 +; return v4 +; } + +function %icmp_or_sge_slt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp slt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sge_slt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_sge_sle(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp sle v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sge_sle(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = iconst.i8 1 +; return v5 ; v5 = 1 +; } + +function %icmp_or_sge_sgt(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp sgt v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sge_sgt(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v5 = icmp sge v0, v1 +; v6 -> v5 +; return v5 +; } + +function %icmp_or_sge_sge(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp sge v0, v1 + v3 = icmp sge v0, v1 + v4 = bor v2, v3 + return v4 +} + +; function %icmp_or_sge_sge(i32, i32) -> i8 fast { +; block0(v0: i32, v1: i32): +; v2 = icmp sge v0, v1 +; return v2 +; } + diff --git a/cranelift/filetests/filetests/egraph/make-icmp-tests.sh b/cranelift/filetests/filetests/egraph/make-icmp-tests.sh new file mode 100755 index 0000000000..79b0217812 --- /dev/null +++ b/cranelift/filetests/filetests/egraph/make-icmp-tests.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +set -e +cd $(dirname "$0") +out=icmp.clif +CCS="eq ne ult ule ugt uge slt sle sgt sge" + +function main { + cat << EOF > $out +test optimize precise-output +set opt_level=speed +set use_egraphs=true +target x86_64 + +;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +;; !!! GENERATED BY 'make-icmp-tests.sh' DO NOT EDIT !!! +;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +;; run with the 'CRANELIFT_TEST_BLESS=1' env var set to update this file + +EOF + for op in "and" "or"; do + for cc1 in $CCS; do + for cc2 in $CCS; do + cat << EOF >> $out +function %icmp_${op}_${cc1}_${cc2}(i32, i32) -> i8 { +block0(v0: i32, v1: i32): + v2 = icmp ${cc1} v0, v1 + v3 = icmp ${cc2} v0, v1 + v4 = b${op} v2, v3 + return v4 +} +EOF + done + done + done +} + +main