From c8c224ead6000c0a8b4120cd3362b3b1e89e48b9 Mon Sep 17 00:00:00 2001 From: Karl Meakin Date: Fri, 31 Mar 2023 18:40:31 +0100 Subject: [PATCH] ISLE: move `icmp` rewrites to separate file. (#6120) * ISLE: move `icmp` rewrites to separate file. Move `icmp`-related rewrite rules from `algebraic.isle` to `icmp.isle`. Also move `icmp`-related tests from `algebraic.clif` to `icmp.clif`. * Put parameterized and unparameterized `icmp` tests in separate files * Undo refactoring of (ir)reflexivity rewrites * Fix `icmp-parameterised.clif` * Undo formatting/comment changes --- cranelift/codegen/build.rs | 5 +- cranelift/codegen/src/opts/algebraic.isle | 191 - cranelift/codegen/src/opts/icmp.isle | 177 + .../filetests/filetests/egraph/algebraic.clif | 186 - .../filetests/egraph/icmp-parameterized.clif | 3732 +++++++++++++++++ .../filetests/filetests/egraph/icmp.clif | 3021 +------------ .../egraph/make-icmp-parameterized-tests.sh | 89 + .../filetests/egraph/make-icmp-tests.sh | 38 - 8 files changed, 4026 insertions(+), 3413 deletions(-) create mode 100644 cranelift/codegen/src/opts/icmp.isle create mode 100644 cranelift/filetests/filetests/egraph/icmp-parameterized.clif create mode 100755 cranelift/filetests/filetests/egraph/make-icmp-parameterized-tests.sh delete mode 100755 cranelift/filetests/filetests/egraph/make-icmp-tests.sh diff --git a/cranelift/codegen/build.rs b/cranelift/codegen/build.rs index e98bc3df52..349f3140b9 100644 --- a/cranelift/codegen/build.rs +++ b/cranelift/codegen/build.rs @@ -220,11 +220,12 @@ fn get_isle_compilations( output: out_dir.join("isle_opt.rs"), inputs: vec![ prelude_isle.clone(), - prelude_opt_isle.clone(), + prelude_opt_isle, src_opts.join("algebraic.isle"), + src_opts.join("icmp.isle"), src_opts.join("cprop.isle"), ], - untracked_inputs: vec![clif_opt_isle.clone()], + untracked_inputs: vec![clif_opt_isle], }, // The x86-64 instruction selector. IsleCompilation { diff --git a/cranelift/codegen/src/opts/algebraic.isle b/cranelift/codegen/src/opts/algebraic.isle index db3d8d4b48..d29dba8b9b 100644 --- a/cranelift/codegen/src/opts/algebraic.isle +++ b/cranelift/codegen/src/opts/algebraic.isle @@ -322,151 +322,11 @@ (rule (simplify x @ (f64const _ _)) (remat x)) -;; Optimize icmp-of-icmp. -(rule (simplify (ne ty - (uextend _ inner @ (icmp ty _ _ _)) - (iconst _ (u64_from_imm64 0)))) - (subsume inner)) - -(rule (simplify (eq ty - (uextend _ (icmp ty cc x y)) - (iconst _ (u64_from_imm64 0)))) - (subsume (icmp ty (intcc_inverse cc) x y))) - -;; Optimize select-of-uextend-of-icmp to select-of-icmp, because -;; select can take an I8 condition too. -(rule (simplify - (select ty (uextend _ c @ (icmp _ _ _ _)) x y)) - (select ty c x y)) -(rule (simplify - (select ty (uextend _ c @ (icmp _ _ _ _)) x y)) - (select ty c x y)) - -;; `x == x` is always true for integers; `x != x` is false. Strict -;; inequalities are false, and loose inequalities are true. -(rule (simplify (eq (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 1))) -(rule (simplify (ne (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 0))) -(rule (simplify (ugt (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 0))) -(rule (simplify (uge (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 1))) -(rule (simplify (sgt (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 0))) -(rule (simplify (sge (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 1))) -(rule (simplify (ult (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 0))) -(rule (simplify (ule (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 1))) -(rule (simplify (slt (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 0))) -(rule (simplify (sle (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 1))) - ;; (x ^ -1) can be replaced with the `bnot` instruction (rule (simplify (bxor ty x (iconst ty k))) (if-let -1 (i64_sextend_imm64 ty k)) (bnot ty x)) - -;; Masking the result of a comparison with 1 always results in the comparison -;; itself. Note that comparisons in wasm may sometimes be hidden behind -;; extensions. -(rule (simplify - (band (ty_int _) - cmp @ (icmp _ _ _ _) - (iconst _ (u64_from_imm64 1)))) - cmp) -(rule (simplify - (band (ty_int _) - extend @ (uextend _ (icmp _ _ _ _)) - (iconst _ (u64_from_imm64 1)))) - extend) - -;; 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)))) - -;; 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)) - -;; ugt(x, 0) == ne(x, 0). -(rule (simplify - (ugt (fits_in_64 (ty_int bty)) x zero @ (iconst _ (u64_from_imm64 0)))) - (ne bty x zero)) - -;; uge(x, 0) == true. -(rule (simplify - (uge (fits_in_64 (ty_int bty)) x zero @ (iconst _ (u64_from_imm64 0)))) - (subsume (iconst bty (imm64 1)))) - -;; ult(x, UMAX) == ne(x, UMAX). -(rule (simplify - (ult (fits_in_64 (ty_int bty)) x umax @ (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (ty_umax cty))) - (ne bty x umax)) - -;; ule(x, UMAX) == true. -(rule (simplify - (ule (fits_in_64 (ty_int bty)) x umax @ (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (ty_umax cty))) - (subsume (iconst bty (imm64 1)))) - -;; ugt(x, UMAX) == false. -(rule (simplify - (ugt (fits_in_64 (ty_int bty)) x umax @ (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (ty_umax cty))) - (subsume (iconst bty (imm64 0)))) - -;; uge(x, UMAX) == eq(x, UMAX). -(rule (simplify - (uge (fits_in_64 (ty_int bty)) x umax @ (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (ty_umax cty))) - (eq bty x umax)) - -;; 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))) - (subsume (iconst bty (imm64 0)))) - -;; sle(x, SMIN) == eq(x, SMIN). -(rule (simplify - (sle (fits_in_64 (ty_int bty)) x smin @ (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (ty_smin cty))) - (eq bty x smin)) - -;; 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))) - (ne bty x smin)) - -;; sge(x, SMIN) == true. -(rule (simplify - (sge (fits_in_64 (ty_int bty)) x smin @ (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (ty_smin cty))) - (subsume (iconst bty (imm64 1)))) - -;; slt(x, SMAX) == ne(x, SMAX). -(rule (simplify - (slt (fits_in_64 (ty_int bty)) x smax @ (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (ty_smax cty))) - (ne bty x smax)) - -;; sle(x, SMAX) == true. -(rule (simplify - (sle (fits_in_64 (ty_int bty)) x smax @ (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (ty_smax cty))) - (subsume (iconst bty (imm64 1)))) - -;; sgt(x, SMAX) == false. -(rule (simplify - (sgt (fits_in_64 (ty_int bty)) x smax @ (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (ty_smax cty))) - (subsume (iconst bty (imm64 0)))) - -;; sge(x, SMAX) == eq(x, SMAX). -(rule (simplify - (sge (fits_in_64 (ty_int bty)) x smax @ (iconst cty (u64_from_imm64 y)))) - (if-let $true (u64_eq y (ty_smax cty))) - (eq bty x smax)) - ;; 32-bit integers zero-extended to 64-bit integers are never negative (rule (simplify (slt ty @@ -479,57 +339,6 @@ (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)) (rule (simplify (select ty (sge _ x y) x y)) (smax ty x y)) diff --git a/cranelift/codegen/src/opts/icmp.isle b/cranelift/codegen/src/opts/icmp.isle new file mode 100644 index 0000000000..d48281adc5 --- /dev/null +++ b/cranelift/codegen/src/opts/icmp.isle @@ -0,0 +1,177 @@ +;; `icmp`-related rewrites + +;; `x == x` is always true for integers; `x != x` is false. Strict +;; inequalities are false, and loose inequalities are true. +(rule (simplify (eq (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 1))) +(rule (simplify (ne (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 0))) +(rule (simplify (ugt (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 0))) +(rule (simplify (uge (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 1))) +(rule (simplify (sgt (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 0))) +(rule (simplify (sge (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 1))) +(rule (simplify (ult (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 0))) +(rule (simplify (ule (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 1))) +(rule (simplify (slt (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 0))) +(rule (simplify (sle (fits_in_64 (ty_int ty)) x x)) (iconst ty (imm64 1))) + +;; Optimize icmp-of-icmp. +(rule (simplify (ne ty + (uextend _ inner @ (icmp ty _ _ _)) + (iconst _ (u64_from_imm64 0)))) + (subsume inner)) + +(rule (simplify (eq ty + (uextend _ (icmp ty cc x y)) + (iconst _ (u64_from_imm64 0)))) + (subsume (icmp ty (intcc_inverse cc) x y))) + +;; Optimize select-of-uextend-of-icmp to select-of-icmp, because +;; select can take an I8 condition too. +(rule (simplify + (select ty (uextend _ c @ (icmp _ _ _ _)) x y)) + (select ty c x y)) +(rule (simplify + (select ty (uextend _ c @ (icmp _ _ _ _)) x y)) + (select ty c x y)) + +;; Masking the result of a comparison with 1 always results in the comparison +;; itself. Note that comparisons in wasm may sometimes be hidden behind +;; extensions. +(rule (simplify + (band (ty_int _) + cmp @ (icmp _ _ _ _) + (iconst _ (u64_from_imm64 1)))) + cmp) +(rule (simplify + (band (ty_int _) + extend @ (uextend _ (icmp _ _ _ _)) + (iconst _ (u64_from_imm64 1)))) + extend) + +;; 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)))) + +;; 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)) + +;; ugt(x, 0) == ne(x, 0). +(rule (simplify (ugt (fits_in_64 (ty_int bty)) x zero @ (iconst _ (u64_from_imm64 0)))) + (ne bty x zero)) + +;; uge(x, 0) == true. +(rule (simplify (uge (fits_in_64 (ty_int bty)) x zero @ (iconst _ (u64_from_imm64 0)))) + (subsume (iconst bty (imm64 1)))) + +;; ult(x, UMAX) == ne(x, UMAX). +(rule (simplify (ult (fits_in_64 (ty_int bty)) x umax @ (iconst cty (u64_from_imm64 y)))) + (if-let $true (u64_eq y (ty_umax cty))) + (ne bty x umax)) + +;; ule(x, UMAX) == true. +(rule (simplify (ule (fits_in_64 (ty_int bty)) x umax @ (iconst cty (u64_from_imm64 y)))) + (if-let $true (u64_eq y (ty_umax cty))) + (subsume (iconst bty (imm64 1)))) + +;; ugt(x, UMAX) == false. +(rule (simplify (ugt (fits_in_64 (ty_int bty)) x umax @ (iconst cty (u64_from_imm64 y)))) + (if-let $true (u64_eq y (ty_umax cty))) + (subsume (iconst bty (imm64 0)))) + +;; uge(x, UMAX) == eq(x, UMAX). +(rule (simplify (uge (fits_in_64 (ty_int bty)) x umax @ (iconst cty (u64_from_imm64 y)))) + (if-let $true (u64_eq y (ty_umax cty))) + (eq bty x umax)) + +;; 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))) + (subsume (iconst bty (imm64 0)))) + +;; sle(x, SMIN) == eq(x, SMIN). +(rule (simplify (sle (fits_in_64 (ty_int bty)) x smin @ (iconst cty (u64_from_imm64 y)))) + (if-let $true (u64_eq y (ty_smin cty))) + (eq bty x smin)) + +;; 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))) + (ne bty x smin)) + +;; sge(x, SMIN) == true. +(rule (simplify (sge (fits_in_64 (ty_int bty)) x smin @ (iconst cty (u64_from_imm64 y)))) + (if-let $true (u64_eq y (ty_smin cty))) + (subsume (iconst bty (imm64 1)))) + +;; slt(x, SMAX) == ne(x, SMAX). +(rule (simplify (slt (fits_in_64 (ty_int bty)) x smax @ (iconst cty (u64_from_imm64 y)))) + (if-let $true (u64_eq y (ty_smax cty))) + (ne bty x smax)) + +;; sle(x, SMAX) == true. +(rule (simplify (sle (fits_in_64 (ty_int bty)) x smax @ (iconst cty (u64_from_imm64 y)))) + (if-let $true (u64_eq y (ty_smax cty))) + (subsume (iconst bty (imm64 1)))) + +;; sgt(x, SMAX) == false. +(rule (simplify (sgt (fits_in_64 (ty_int bty)) x smax @ (iconst cty (u64_from_imm64 y)))) + (if-let $true (u64_eq y (ty_smax cty))) + (subsume (iconst bty (imm64 0)))) + +;; sge(x, SMAX) == eq(x, SMAX). +(rule (simplify (sge (fits_in_64 (ty_int bty)) x smax @ (iconst cty (u64_from_imm64 y)))) + (if-let $true (u64_eq y (ty_smax cty))) + (eq bty x smax)) + +;; `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)) + (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)) + +(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)) + +(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) diff --git a/cranelift/filetests/filetests/egraph/algebraic.clif b/cranelift/filetests/filetests/egraph/algebraic.clif index f157ac1784..ce91d0dff6 100644 --- a/cranelift/filetests/filetests/egraph/algebraic.clif +++ b/cranelift/filetests/filetests/egraph/algebraic.clif @@ -394,24 +394,6 @@ block0(v0: i64): ; check: return v4 } -function %f2(i8) -> i8 { -block0(v1: i8): - v2 = icmp eq v1, v1 - return v2 -} - -; check: v3 = iconst.i8 1 -; check: return v3 - -function %f3(i8) -> i8 { -block0(v1: i8): - v2 = icmp ne v1, v1 - return v2 -} - -; check: v3 = iconst.i8 0 -; check: return v3 - function %bnot1(i8) -> i8 { block0(v1: i8): v2 = iconst.i8 -1 @@ -442,174 +424,6 @@ block0(v1: i64): ; check: v5 = bnot v1 ; check: return v5 -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 -} - -; check: v3 = icmp ult v1, v2 -; check: 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 -} - -; check: v3 = icmp ult v1, v2 -; check: v4 = uextend.i64 v3 -; check: return v4 - -function %icmp_ult_0(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0 - v2 = icmp ult v0, v1 - return v2 - ; check: v3 = iconst.i8 0 - ; check: return v3 -} - -function %icmp_ule_0(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0 - v2 = icmp ule v0, v1 - return v2 - ; check: v3 = icmp eq v0, v1 - ; check: return v3 -} - -function %icmp_ugt_0(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0 - v2 = icmp ugt v0, v1 - return v2 - ; check: v3 = icmp ne v0, v1 - ; check: return v3 -} - -function %icmp_uge_0(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0 - v2 = icmp uge v0, v1 - return v2 - ; check: v3 = iconst.i8 1 - ; check: return v3 -} - -function %icmp_ult_umax(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xffff_ffff - v2 = icmp ult v0, v1 - return v2 - ; check: v3 = icmp ne v0, v1 - ; check: return v3 -} - -function %icmp_ule_umax(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xffff_ffff - v2 = icmp ule v0, v1 - return v2 - ; check: v3 = iconst.i8 1 - ; check: return v3 -} - -function %icmp_ugt_umax(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xffff_ffff - v2 = icmp ugt v0, v1 - return v2 - ; check: v3 = iconst.i8 0 - ; check: return v3 -} - -function %icmp_uge_umax(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0xffff_ffff - v2 = icmp uge v0, v1 - return v2 - ; check: v3 = icmp eq v0, v1 - ; check: return v3 -} - -function %icmp_slt_smin(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0000 - v2 = icmp slt v0, v1 - return v2 - ; check: v3 = iconst.i8 0 - ; check: return v3 -} - -function %icmp_sle_smin(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0000 - v2 = icmp sle v0, v1 - return v2 - ; check: v3 = icmp eq v0, v1 - ; check: return v3 -} - -function %icmp_sgt_smin(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0000 - v2 = icmp sgt v0, v1 - return v2 - ; check: v3 = icmp ne v0, v1 - ; check: return v3 -} - -function %icmp_sge_smin(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x8000_0000 - v2 = icmp sge v0, v1 - return v2 - ; check: v3 = iconst.i8 1 - ; check: return v3 -} - -function %icmp_slt_smax(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFF - v2 = icmp slt v0, v1 - return v2 - ; check: v3 = icmp ne v0, v1 - ; check: return v3 -} - -function %icmp_sle_smax(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFF - v2 = icmp sle v0, v1 - return v2 - ; check: v3 = iconst.i8 1 - ; check: return v3 -} - -function %icmp_sgt_smax(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFF - v2 = icmp sgt v0, v1 - return v2 - ; check: v3 = iconst.i8 0 - ; check: return v3 -} - -function %icmp_sge_smax(i32) -> i8 { -block0(v0: i32): - v1 = iconst.i32 0x7FFF_FFFF - v2 = icmp sge v0, v1 - return v2 - ; check: v3 = icmp eq v0, v1 - ; check: return v3 -} - function %extend_always_above_zero(i32) -> i8 { block0(v1: i32): v2 = uextend.i64 v1 diff --git a/cranelift/filetests/filetests/egraph/icmp-parameterized.clif b/cranelift/filetests/filetests/egraph/icmp-parameterized.clif new file mode 100644 index 0000000000..babeb6b225 --- /dev/null +++ b/cranelift/filetests/filetests/egraph/icmp-parameterized.clif @@ -0,0 +1,3732 @@ +test optimize precise-output +set opt_level=speed +set use_egraphs=true +target x86_64 + +;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +;; !!! GENERATED BY 'make-parameterized-icmp-tests.sh' DO NOT EDIT !!! +;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +;; run with the 'CRANELIFT_TEST_BLESS=1' env var set to update this file + +function %icmp_eq_self(i32) -> i8 { +block0(v0: i32): + v1 = icmp eq v0, v0 + return v1 +} + +; function %icmp_eq_self(i32) -> i8 fast { +; block0(v0: i32): +; v2 = iconst.i8 1 +; v3 -> v2 +; return v2 ; v2 = 1 +; } + +function %icmp_ne_self(i32) -> i8 { +block0(v0: i32): + v1 = icmp ne v0, v0 + return v1 +} + +; function %icmp_ne_self(i32) -> i8 fast { +; block0(v0: i32): +; v2 = iconst.i8 0 +; v3 -> v2 +; return v2 ; v2 = 0 +; } + +function %icmp_ult_self(i32) -> i8 { +block0(v0: i32): + v1 = icmp ult v0, v0 + return v1 +} + +; function %icmp_ult_self(i32) -> i8 fast { +; block0(v0: i32): +; v2 = iconst.i8 0 +; v3 -> v2 +; return v2 ; v2 = 0 +; } + +function %icmp_ule_self(i32) -> i8 { +block0(v0: i32): + v1 = icmp ule v0, v0 + return v1 +} + +; function %icmp_ule_self(i32) -> i8 fast { +; block0(v0: i32): +; v2 = iconst.i8 1 +; v3 -> v2 +; return v2 ; v2 = 1 +; } + +function %icmp_ugt_self(i32) -> i8 { +block0(v0: i32): + v1 = icmp ugt v0, v0 + return v1 +} + +; function %icmp_ugt_self(i32) -> i8 fast { +; block0(v0: i32): +; v2 = iconst.i8 0 +; v3 -> v2 +; return v2 ; v2 = 0 +; } + +function %icmp_uge_self(i32) -> i8 { +block0(v0: i32): + v1 = icmp uge v0, v0 + return v1 +} + +; function %icmp_uge_self(i32) -> i8 fast { +; block0(v0: i32): +; v2 = iconst.i8 1 +; v3 -> v2 +; return v2 ; v2 = 1 +; } + +function %icmp_slt_self(i32) -> i8 { +block0(v0: i32): + v1 = icmp slt v0, v0 + return v1 +} + +; function %icmp_slt_self(i32) -> i8 fast { +; block0(v0: i32): +; v2 = iconst.i8 0 +; v3 -> v2 +; return v2 ; v2 = 0 +; } + +function %icmp_sle_self(i32) -> i8 { +block0(v0: i32): + v1 = icmp sle v0, v0 + return v1 +} + +; function %icmp_sle_self(i32) -> i8 fast { +; block0(v0: i32): +; v2 = iconst.i8 1 +; v3 -> v2 +; return v2 ; v2 = 1 +; } + +function %icmp_sgt_self(i32) -> i8 { +block0(v0: i32): + v1 = icmp sgt v0, v0 + return v1 +} + +; function %icmp_sgt_self(i32) -> i8 fast { +; block0(v0: i32): +; v2 = iconst.i8 0 +; v3 -> v2 +; return v2 ; v2 = 0 +; } + +function %icmp_sge_self(i32) -> i8 { +block0(v0: i32): + v1 = icmp sge v0, v0 + return v1 +} + +; function %icmp_sge_self(i32) -> i8 fast { +; block0(v0: i32): +; v2 = iconst.i8 1 +; v3 -> v2 +; 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 + v2 = icmp eq v0, v1 + return v2 +} + +; function %icmp_eq_umin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0 +; v2 = icmp eq v0, v1 ; v1 = 0 +; return v2 +; } + +function %icmp_eq_umax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0xFFFF_FFFF + v2 = icmp eq v0, v1 + return v2 +} + +; function %icmp_eq_umax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0xffff_ffff +; v2 = icmp eq v0, v1 ; v1 = 0xffff_ffff +; return v2 +; } + +function %icmp_eq_smin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x8000_0000 + v2 = icmp eq v0, v1 + return v2 +} + +; function %icmp_eq_smin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x8000_0000 +; v2 = icmp eq v0, v1 ; v1 = 0x8000_0000 +; return v2 +; } + +function %icmp_eq_smax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x7FFF_FFFF + v2 = icmp eq v0, v1 + return v2 +} + +; function %icmp_eq_smax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x7fff_ffff +; v2 = icmp eq v0, v1 ; v1 = 0x7fff_ffff +; return v2 +; } + +function %icmp_ne_umin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0 + v2 = icmp ne v0, v1 + return v2 +} + +; function %icmp_ne_umin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0 +; v2 = icmp ne v0, v1 ; v1 = 0 +; return v2 +; } + +function %icmp_ne_umax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0xFFFF_FFFF + v2 = icmp ne v0, v1 + return v2 +} + +; function %icmp_ne_umax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0xffff_ffff +; v2 = icmp ne v0, v1 ; v1 = 0xffff_ffff +; return v2 +; } + +function %icmp_ne_smin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x8000_0000 + v2 = icmp ne v0, v1 + return v2 +} + +; function %icmp_ne_smin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x8000_0000 +; v2 = icmp ne v0, v1 ; v1 = 0x8000_0000 +; return v2 +; } + +function %icmp_ne_smax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x7FFF_FFFF + v2 = icmp ne v0, v1 + return v2 +} + +; function %icmp_ne_smax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x7fff_ffff +; v2 = icmp ne v0, v1 ; v1 = 0x7fff_ffff +; return v2 +; } + +function %icmp_ult_umin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0 + v2 = icmp ult v0, v1 + return v2 +} + +; function %icmp_ult_umin(i32) -> i8 fast { +; block0(v0: i32): +; v3 = iconst.i8 0 +; return v3 ; v3 = 0 +; } + +function %icmp_ult_umax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0xFFFF_FFFF + v2 = icmp ult v0, v1 + return v2 +} + +; function %icmp_ult_umax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0xffff_ffff +; v3 = icmp ne v0, v1 ; v1 = 0xffff_ffff +; v4 -> v3 +; return v3 +; } + +function %icmp_ult_smin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x8000_0000 + v2 = icmp ult v0, v1 + return v2 +} + +; function %icmp_ult_smin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x8000_0000 +; v2 = icmp ult v0, v1 ; v1 = 0x8000_0000 +; return v2 +; } + +function %icmp_ult_smax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x7FFF_FFFF + v2 = icmp ult v0, v1 + return v2 +} + +; function %icmp_ult_smax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x7fff_ffff +; v2 = icmp ult v0, v1 ; v1 = 0x7fff_ffff +; return v2 +; } + +function %icmp_ule_umin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0 + v2 = icmp ule v0, v1 + return v2 +} + +; function %icmp_ule_umin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0 +; v3 = icmp eq v0, v1 ; v1 = 0 +; v4 -> v3 +; return v3 +; } + +function %icmp_ule_umax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0xFFFF_FFFF + v2 = icmp ule v0, v1 + return v2 +} + +; function %icmp_ule_umax(i32) -> i8 fast { +; block0(v0: i32): +; v3 = iconst.i8 1 +; return v3 ; v3 = 1 +; } + +function %icmp_ule_smin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x8000_0000 + v2 = icmp ule v0, v1 + return v2 +} + +; function %icmp_ule_smin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x8000_0000 +; v2 = icmp ule v0, v1 ; v1 = 0x8000_0000 +; return v2 +; } + +function %icmp_ule_smax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x7FFF_FFFF + v2 = icmp ule v0, v1 + return v2 +} + +; function %icmp_ule_smax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x7fff_ffff +; v2 = icmp ule v0, v1 ; v1 = 0x7fff_ffff +; return v2 +; } + +function %icmp_ugt_umin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0 + v2 = icmp ugt v0, v1 + return v2 +} + +; function %icmp_ugt_umin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0 +; v3 = icmp ne v0, v1 ; v1 = 0 +; v4 -> v3 +; return v3 +; } + +function %icmp_ugt_umax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0xFFFF_FFFF + v2 = icmp ugt v0, v1 + return v2 +} + +; function %icmp_ugt_umax(i32) -> i8 fast { +; block0(v0: i32): +; v3 = iconst.i8 0 +; return v3 ; v3 = 0 +; } + +function %icmp_ugt_smin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x8000_0000 + v2 = icmp ugt v0, v1 + return v2 +} + +; function %icmp_ugt_smin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x8000_0000 +; v2 = icmp ugt v0, v1 ; v1 = 0x8000_0000 +; return v2 +; } + +function %icmp_ugt_smax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x7FFF_FFFF + v2 = icmp ugt v0, v1 + return v2 +} + +; function %icmp_ugt_smax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x7fff_ffff +; v2 = icmp ugt v0, v1 ; v1 = 0x7fff_ffff +; return v2 +; } + +function %icmp_uge_umin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0 + v2 = icmp uge v0, v1 + return v2 +} + +; function %icmp_uge_umin(i32) -> i8 fast { +; block0(v0: i32): +; v3 = iconst.i8 1 +; return v3 ; v3 = 1 +; } + +function %icmp_uge_umax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0xFFFF_FFFF + v2 = icmp uge v0, v1 + return v2 +} + +; function %icmp_uge_umax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0xffff_ffff +; v3 = icmp eq v0, v1 ; v1 = 0xffff_ffff +; v4 -> v3 +; return v3 +; } + +function %icmp_uge_smin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x8000_0000 + v2 = icmp uge v0, v1 + return v2 +} + +; function %icmp_uge_smin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x8000_0000 +; v2 = icmp uge v0, v1 ; v1 = 0x8000_0000 +; return v2 +; } + +function %icmp_uge_smax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x7FFF_FFFF + v2 = icmp uge v0, v1 + return v2 +} + +; function %icmp_uge_smax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x7fff_ffff +; v2 = icmp uge v0, v1 ; v1 = 0x7fff_ffff +; return v2 +; } + +function %icmp_slt_umin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0 + v2 = icmp slt v0, v1 + return v2 +} + +; function %icmp_slt_umin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0 +; v2 = icmp slt v0, v1 ; v1 = 0 +; return v2 +; } + +function %icmp_slt_umax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0xFFFF_FFFF + v2 = icmp slt v0, v1 + return v2 +} + +; function %icmp_slt_umax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0xffff_ffff +; v2 = icmp slt v0, v1 ; v1 = 0xffff_ffff +; return v2 +; } + +function %icmp_slt_smin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x8000_0000 + v2 = icmp slt v0, v1 + return v2 +} + +; function %icmp_slt_smin(i32) -> i8 fast { +; block0(v0: i32): +; v3 = iconst.i8 0 +; return v3 ; v3 = 0 +; } + +function %icmp_slt_smax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x7FFF_FFFF + v2 = icmp slt v0, v1 + return v2 +} + +; function %icmp_slt_smax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x7fff_ffff +; v3 = icmp ne v0, v1 ; v1 = 0x7fff_ffff +; v4 -> v3 +; return v3 +; } + +function %icmp_sle_umin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0 + v2 = icmp sle v0, v1 + return v2 +} + +; function %icmp_sle_umin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0 +; v2 = icmp sle v0, v1 ; v1 = 0 +; return v2 +; } + +function %icmp_sle_umax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0xFFFF_FFFF + v2 = icmp sle v0, v1 + return v2 +} + +; function %icmp_sle_umax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0xffff_ffff +; v2 = icmp sle v0, v1 ; v1 = 0xffff_ffff +; return v2 +; } + +function %icmp_sle_smin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x8000_0000 + v2 = icmp sle v0, v1 + return v2 +} + +; function %icmp_sle_smin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x8000_0000 +; v3 = icmp eq v0, v1 ; v1 = 0x8000_0000 +; v4 -> v3 +; return v3 +; } + +function %icmp_sle_smax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x7FFF_FFFF + v2 = icmp sle v0, v1 + return v2 +} + +; function %icmp_sle_smax(i32) -> i8 fast { +; block0(v0: i32): +; v3 = iconst.i8 1 +; return v3 ; v3 = 1 +; } + +function %icmp_sgt_umin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0 + v2 = icmp sgt v0, v1 + return v2 +} + +; function %icmp_sgt_umin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0 +; v2 = icmp sgt v0, v1 ; v1 = 0 +; return v2 +; } + +function %icmp_sgt_umax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0xFFFF_FFFF + v2 = icmp sgt v0, v1 + return v2 +} + +; function %icmp_sgt_umax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0xffff_ffff +; v2 = icmp sgt v0, v1 ; v1 = 0xffff_ffff +; return v2 +; } + +function %icmp_sgt_smin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x8000_0000 + v2 = icmp sgt v0, v1 + return v2 +} + +; function %icmp_sgt_smin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x8000_0000 +; v3 = icmp ne v0, v1 ; v1 = 0x8000_0000 +; v4 -> v3 +; return v3 +; } + +function %icmp_sgt_smax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x7FFF_FFFF + v2 = icmp sgt v0, v1 + return v2 +} + +; function %icmp_sgt_smax(i32) -> i8 fast { +; block0(v0: i32): +; v3 = iconst.i8 0 +; return v3 ; v3 = 0 +; } + +function %icmp_sge_umin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0 + v2 = icmp sge v0, v1 + return v2 +} + +; function %icmp_sge_umin(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0 +; v2 = icmp sge v0, v1 ; v1 = 0 +; return v2 +; } + +function %icmp_sge_umax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0xFFFF_FFFF + v2 = icmp sge v0, v1 + return v2 +} + +; function %icmp_sge_umax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0xffff_ffff +; v2 = icmp sge v0, v1 ; v1 = 0xffff_ffff +; return v2 +; } + +function %icmp_sge_smin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x8000_0000 + v2 = icmp sge v0, v1 + return v2 +} + +; function %icmp_sge_smin(i32) -> i8 fast { +; block0(v0: i32): +; v3 = iconst.i8 1 +; return v3 ; v3 = 1 +; } + +function %icmp_sge_smax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x7FFF_FFFF + v2 = icmp sge v0, v1 + return v2 +} + +; function %icmp_sge_smax(i32) -> i8 fast { +; block0(v0: i32): +; v1 = iconst.i32 0x7fff_ffff +; v3 = icmp eq v0, v1 ; v1 = 0x7fff_ffff +; v4 -> v3 +; return v3 +; } + +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/icmp.clif b/cranelift/filetests/filetests/egraph/icmp.clif index 0f10e4062b..eda94bb31e 100644 --- a/cranelift/filetests/filetests/egraph/icmp.clif +++ b/cranelift/filetests/filetests/egraph/icmp.clif @@ -3,3008 +3,37 @@ 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 +;; Masking the result of a comparison with 1 always results in the comparison +;; itself (comparisons in wasm may sometimes be hidden behind extensions): +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 %icmp_and_eq_eq(i32, i32) -> i8 fast { -; block0(v0: i32, v1: i32): -; v2 = icmp eq v0, v1 -; return v2 +; function %mask_icmp_result(i64, i64) -> i8 fast { +; block0(v1: i64, v2: i64): +; v3 = icmp ult v1, v2 +; v6 -> v3 +; return v3 ; } -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 %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 %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 +; 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_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-parameterized-tests.sh b/cranelift/filetests/filetests/egraph/make-icmp-parameterized-tests.sh new file mode 100755 index 0000000000..f1f061c522 --- /dev/null +++ b/cranelift/filetests/filetests/egraph/make-icmp-parameterized-tests.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash + +set -e +cd $(dirname "$0") +out=parameterized-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-parameterized-tests.sh' DO NOT EDIT !!! +;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +;; run with the 'CRANELIFT_TEST_BLESS=1' env var set to update this file + +EOF + + # Reflexivity/irreflexivity of `icmp`` cond codes: + # for reflexive cond codes, (icmp cc x x) == true. + # for irreflexive cond codes, (icmp cc x x) == false. + for cc in $CCS; do + cat << EOF >> $out +function %icmp_${cc}_self(i32) -> i8 { +block0(v0: i32): + v1 = icmp ${cc} v0, v0 + return v1 +} + +EOF + done + + # Comparisons against largest/smallest signed/unsigned values: + for cc in $CCS; do + cat << EOF >> $out +function %icmp_${cc}_umin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0 + v2 = icmp ${cc} v0, v1 + return v2 +} + +function %icmp_${cc}_umax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0xFFFF_FFFF + v2 = icmp ${cc} v0, v1 + return v2 +} + +function %icmp_${cc}_smin(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x8000_0000 + v2 = icmp ${cc} v0, v1 + return v2 +} + +function %icmp_${cc}_smax(i32) -> i8 { +block0(v0: i32): + v1 = iconst.i32 0x7FFF_FFFF + v2 = icmp ${cc} v0, v1 + return v2 +} + +EOF + done + + # `band`/`bor` of 2 comparisons: + 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 diff --git a/cranelift/filetests/filetests/egraph/make-icmp-tests.sh b/cranelift/filetests/filetests/egraph/make-icmp-tests.sh deleted file mode 100755 index 79b0217812..0000000000 --- a/cranelift/filetests/filetests/egraph/make-icmp-tests.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/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