ISLE: rewrite loose inequalities to strict inequalities and strict inequalities to equalities (#6130)
* ISLE: rewrite loose inequalities to strict inequalities * Rewrite strict inequalities to equalities where possible
This commit is contained in:
@@ -47,11 +47,36 @@
|
|||||||
(iconst _ (u64_from_imm64 1))))
|
(iconst _ (u64_from_imm64 1))))
|
||||||
extend)
|
extend)
|
||||||
|
|
||||||
|
;; Rewrite loose inequalities to strict inequalities:
|
||||||
|
;; ule(x, c) == ult(x, c+1), for c != UMAX.
|
||||||
|
(rule (simplify (ule (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 c))))
|
||||||
|
(if-let $false (u64_eq c (ty_umax cty)))
|
||||||
|
(ult bty x (iconst cty (imm64 (u64_add c 1)))))
|
||||||
|
|
||||||
|
;; uge(x, c) == ugt(x, c-1), for c != 0.
|
||||||
|
(rule (simplify (uge (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 c))))
|
||||||
|
(if-let $false (u64_eq c 0))
|
||||||
|
(ugt bty x (iconst cty (imm64 (u64_sub c 1)))))
|
||||||
|
|
||||||
|
;; sle(x, c) == slt(x, c+1), for c != SMAX.
|
||||||
|
(rule (simplify (sle (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 c))))
|
||||||
|
(if-let $false (u64_eq c (ty_smax cty)))
|
||||||
|
(slt bty x (iconst cty (imm64 (u64_add c 1)))))
|
||||||
|
|
||||||
|
;; sge(x, c) == sgt(x, c-1), for c != SMIN.
|
||||||
|
(rule (simplify (sge (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 c))))
|
||||||
|
(if-let $false (u64_eq c (ty_smin cty)))
|
||||||
|
(sgt bty x (iconst cty (imm64 (u64_sub c 1)))))
|
||||||
|
|
||||||
;; Comparisons against largest/smallest signed/unsigned values:
|
;; Comparisons against largest/smallest signed/unsigned values:
|
||||||
;; ult(x, 0) == false.
|
;; ult(x, 0) == false.
|
||||||
(rule (simplify (ult (fits_in_64 (ty_int bty)) x zero @ (iconst _ (u64_from_imm64 0))))
|
(rule (simplify (ult (fits_in_64 (ty_int bty)) x zero @ (iconst _ (u64_from_imm64 0))))
|
||||||
(subsume (iconst bty (imm64 0))))
|
(subsume (iconst bty (imm64 0))))
|
||||||
|
|
||||||
|
;; ult(x, 1) == eq(x, 0)
|
||||||
|
(rule (simplify (ult (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 0))))
|
||||||
|
(eq bty x (iconst cty (imm64 0))))
|
||||||
|
|
||||||
;; ule(x, 0) == eq(x, 0)
|
;; ule(x, 0) == eq(x, 0)
|
||||||
(rule (simplify (ule (fits_in_64 (ty_int bty)) x zero @ (iconst _ (u64_from_imm64 0))))
|
(rule (simplify (ule (fits_in_64 (ty_int bty)) x zero @ (iconst _ (u64_from_imm64 0))))
|
||||||
(eq bty x zero))
|
(eq bty x zero))
|
||||||
@@ -84,6 +109,11 @@
|
|||||||
(if-let $true (u64_eq y (ty_umax cty)))
|
(if-let $true (u64_eq y (ty_umax cty)))
|
||||||
(eq bty x umax))
|
(eq bty x umax))
|
||||||
|
|
||||||
|
;; ugt(x, UMAX-1) == eq(x, UMAX).
|
||||||
|
(rule (simplify (ugt (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 y))))
|
||||||
|
(if-let $true (u64_eq y (u64_sub (ty_umax cty) 1)))
|
||||||
|
(eq bty x (iconst cty (imm64 (ty_umax cty)))))
|
||||||
|
|
||||||
;; slt(x, SMIN) == false.
|
;; slt(x, SMIN) == false.
|
||||||
(rule (simplify (slt (fits_in_64 (ty_int bty)) x smin @ (iconst cty (u64_from_imm64 y))))
|
(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)))
|
(if-let $true (u64_eq y (ty_smin cty)))
|
||||||
@@ -94,6 +124,11 @@
|
|||||||
(if-let $true (u64_eq y (ty_smin cty)))
|
(if-let $true (u64_eq y (ty_smin cty)))
|
||||||
(eq bty x smin))
|
(eq bty x smin))
|
||||||
|
|
||||||
|
;; slt(x, SMIN+1) == eq(x, SMIN).
|
||||||
|
(rule (simplify (slt (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 y))))
|
||||||
|
(if-let $true (u64_eq y (u64_add (ty_smin cty) 1)))
|
||||||
|
(eq bty x (iconst cty (imm64 (ty_smin cty)))))
|
||||||
|
|
||||||
;; sgt(x, SMIN) == ne(x, SMIN).
|
;; sgt(x, SMIN) == ne(x, SMIN).
|
||||||
(rule (simplify (sgt (fits_in_64 (ty_int bty)) x smin @ (iconst cty (u64_from_imm64 y))))
|
(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)))
|
(if-let $true (u64_eq y (ty_smin cty)))
|
||||||
@@ -124,6 +159,11 @@
|
|||||||
(if-let $true (u64_eq y (ty_smax cty)))
|
(if-let $true (u64_eq y (ty_smax cty)))
|
||||||
(eq bty x smax))
|
(eq bty x smax))
|
||||||
|
|
||||||
|
;; sgt(x, SMAX-1) == eq(x, SMAX).
|
||||||
|
(rule (simplify (sgt (fits_in_64 (ty_int bty)) x (iconst cty (u64_from_imm64 y))))
|
||||||
|
(if-let $true (u64_eq y (u64_sub (ty_smax cty) 1)))
|
||||||
|
(eq bty x (iconst cty (imm64 (ty_smax cty)))))
|
||||||
|
|
||||||
;; `band`/`bor` of 2 comparisons:
|
;; `band`/`bor` of 2 comparisons:
|
||||||
(rule (simplify (band ty (icmp ty cc1 x y) (icmp ty cc2 x y)))
|
(rule (simplify (band ty (icmp ty cc1 x y) (icmp ty cc2 x y)))
|
||||||
(if-let signed (intcc_comparable cc1 cc2))
|
(if-let signed (intcc_comparable cc1 cc2))
|
||||||
|
|||||||
@@ -441,8 +441,8 @@ block0(v1: i32):
|
|||||||
return v4
|
return v4
|
||||||
}
|
}
|
||||||
|
|
||||||
; check: v5 = iconst.i8 1
|
; check: v7 = iconst.i8 1
|
||||||
; check: return v5
|
; check: return v7
|
||||||
|
|
||||||
function %double_uextend(i16) -> i64 {
|
function %double_uextend(i16) -> i64 {
|
||||||
block0(v1: i16):
|
block0(v1: i16):
|
||||||
|
|||||||
@@ -163,8 +163,8 @@ block0:
|
|||||||
return v2
|
return v2
|
||||||
}
|
}
|
||||||
|
|
||||||
; check: v3 = iconst.i8 1
|
; check: v5 = iconst.i8 1
|
||||||
; nextln: return v3
|
; nextln: return v5
|
||||||
|
|
||||||
function %icmp_uge_i32() -> i8 {
|
function %icmp_uge_i32() -> i8 {
|
||||||
block0:
|
block0:
|
||||||
@@ -174,8 +174,8 @@ block0:
|
|||||||
return v2
|
return v2
|
||||||
}
|
}
|
||||||
|
|
||||||
; check: v3 = iconst.i8 0
|
; check: v4 = iconst.i8 0
|
||||||
; nextln: return v3
|
; nextln: return v4
|
||||||
|
|
||||||
function %icmp_ugt_i32() -> i8 {
|
function %icmp_ugt_i32() -> i8 {
|
||||||
block0:
|
block0:
|
||||||
@@ -207,8 +207,8 @@ block0:
|
|||||||
return v2
|
return v2
|
||||||
}
|
}
|
||||||
|
|
||||||
; check: v3 = iconst.i8 1
|
; check: v5 = iconst.i8 1
|
||||||
; nextln: return v3
|
; nextln: return v5
|
||||||
|
|
||||||
function %icmp_sge_i32() -> i8 {
|
function %icmp_sge_i32() -> i8 {
|
||||||
block0:
|
block0:
|
||||||
@@ -218,8 +218,8 @@ block0:
|
|||||||
return v2
|
return v2
|
||||||
}
|
}
|
||||||
|
|
||||||
; check: v3 = iconst.i8 0
|
; check: v5 = iconst.i8 0
|
||||||
; nextln: return v3
|
; nextln: return v5
|
||||||
|
|
||||||
function %icmp_sgt_i32() -> i8 {
|
function %icmp_sgt_i32() -> i8 {
|
||||||
block0:
|
block0:
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ set use_egraphs=true
|
|||||||
target x86_64
|
target x86_64
|
||||||
|
|
||||||
;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
;; !!! GENERATED BY 'make-parameterized-icmp-tests.sh' DO NOT EDIT !!!
|
;; !!! GENERATED BY 'make-icmp-parameterized-tests.sh' DO NOT EDIT !!!
|
||||||
;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
;; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
;; run with the 'CRANELIFT_TEST_BLESS=1' env var set to update this file
|
;; run with the 'CRANELIFT_TEST_BLESS=1' env var set to update this file
|
||||||
|
|
||||||
@@ -138,38 +138,6 @@ block0(v0: i32):
|
|||||||
; return v2 ; v2 = 1
|
; 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 {
|
function %icmp_eq_umin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0
|
v1 = iconst.i32 0
|
||||||
@@ -184,6 +152,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_eq_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 1
|
||||||
|
v2 = icmp eq v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_eq_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 1
|
||||||
|
; v2 = icmp eq v0, v1 ; v1 = 1
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_eq_umax(i32) -> i8 {
|
function %icmp_eq_umax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0xFFFF_FFFF
|
v1 = iconst.i32 0xFFFF_FFFF
|
||||||
@@ -198,6 +180,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_eq_umax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0xFFFF_FFFE
|
||||||
|
v2 = icmp eq v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_eq_umax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0xffff_fffe
|
||||||
|
; v2 = icmp eq v0, v1 ; v1 = 0xffff_fffe
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_eq_smin(i32) -> i8 {
|
function %icmp_eq_smin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x8000_0000
|
v1 = iconst.i32 0x8000_0000
|
||||||
@@ -212,6 +208,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_eq_smin_plus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x8000_0001
|
||||||
|
v2 = icmp eq v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_eq_smin_plus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0x8000_0001
|
||||||
|
; v2 = icmp eq v0, v1 ; v1 = 0x8000_0001
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_eq_smax(i32) -> i8 {
|
function %icmp_eq_smax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x7FFF_FFFF
|
v1 = iconst.i32 0x7FFF_FFFF
|
||||||
@@ -226,6 +236,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_eq_smax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x7FFF_FFFE
|
||||||
|
v2 = icmp eq v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_eq_smax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0x7fff_fffe
|
||||||
|
; v2 = icmp eq v0, v1 ; v1 = 0x7fff_fffe
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ne_umin(i32) -> i8 {
|
function %icmp_ne_umin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0
|
v1 = iconst.i32 0
|
||||||
@@ -240,6 +264,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ne_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 1
|
||||||
|
v2 = icmp ne v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ne_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 1
|
||||||
|
; v2 = icmp ne v0, v1 ; v1 = 1
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ne_umax(i32) -> i8 {
|
function %icmp_ne_umax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0xFFFF_FFFF
|
v1 = iconst.i32 0xFFFF_FFFF
|
||||||
@@ -254,6 +292,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ne_umax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0xFFFF_FFFE
|
||||||
|
v2 = icmp ne v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ne_umax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0xffff_fffe
|
||||||
|
; v2 = icmp ne v0, v1 ; v1 = 0xffff_fffe
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ne_smin(i32) -> i8 {
|
function %icmp_ne_smin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x8000_0000
|
v1 = iconst.i32 0x8000_0000
|
||||||
@@ -268,6 +320,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ne_smin_plus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x8000_0001
|
||||||
|
v2 = icmp ne v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ne_smin_plus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0x8000_0001
|
||||||
|
; v2 = icmp ne v0, v1 ; v1 = 0x8000_0001
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ne_smax(i32) -> i8 {
|
function %icmp_ne_smax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x7FFF_FFFF
|
v1 = iconst.i32 0x7FFF_FFFF
|
||||||
@@ -282,6 +348,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ne_smax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x7FFF_FFFE
|
||||||
|
v2 = icmp ne v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ne_smax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0x7fff_fffe
|
||||||
|
; v2 = icmp ne v0, v1 ; v1 = 0x7fff_fffe
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ult_umin(i32) -> i8 {
|
function %icmp_ult_umin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0
|
v1 = iconst.i32 0
|
||||||
@@ -295,6 +375,20 @@ block0(v0: i32):
|
|||||||
; return v3 ; v3 = 0
|
; return v3 ; v3 = 0
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ult_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 1
|
||||||
|
v2 = icmp ult v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ult_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 1
|
||||||
|
; v2 = icmp ult v0, v1 ; v1 = 1
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ult_umax(i32) -> i8 {
|
function %icmp_ult_umax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0xFFFF_FFFF
|
v1 = iconst.i32 0xFFFF_FFFF
|
||||||
@@ -310,6 +404,20 @@ block0(v0: i32):
|
|||||||
; return v3
|
; return v3
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ult_umax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0xFFFF_FFFE
|
||||||
|
v2 = icmp ult v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ult_umax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0xffff_fffe
|
||||||
|
; v2 = icmp ult v0, v1 ; v1 = 0xffff_fffe
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ult_smin(i32) -> i8 {
|
function %icmp_ult_smin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x8000_0000
|
v1 = iconst.i32 0x8000_0000
|
||||||
@@ -324,6 +432,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ult_smin_plus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x8000_0001
|
||||||
|
v2 = icmp ult v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ult_smin_plus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0x8000_0001
|
||||||
|
; v2 = icmp ult v0, v1 ; v1 = 0x8000_0001
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ult_smax(i32) -> i8 {
|
function %icmp_ult_smax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x7FFF_FFFF
|
v1 = iconst.i32 0x7FFF_FFFF
|
||||||
@@ -338,6 +460,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ult_smax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x7FFF_FFFE
|
||||||
|
v2 = icmp ult v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ult_smax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0x7fff_fffe
|
||||||
|
; v2 = icmp ult v0, v1 ; v1 = 0x7fff_fffe
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ule_umin(i32) -> i8 {
|
function %icmp_ule_umin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0
|
v1 = iconst.i32 0
|
||||||
@@ -348,9 +484,24 @@ block0(v0: i32):
|
|||||||
; function %icmp_ule_umin(i32) -> i8 fast {
|
; function %icmp_ule_umin(i32) -> i8 fast {
|
||||||
; block0(v0: i32):
|
; block0(v0: i32):
|
||||||
; v1 = iconst.i32 0
|
; v1 = iconst.i32 0
|
||||||
; v3 = icmp eq v0, v1 ; v1 = 0
|
; v5 = icmp eq v0, v1 ; v1 = 0
|
||||||
; v4 -> v3
|
; v7 -> v5
|
||||||
; return v3
|
; return v5
|
||||||
|
; }
|
||||||
|
|
||||||
|
function %icmp_ule_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 1
|
||||||
|
v2 = icmp ule v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ule_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 2
|
||||||
|
; v4 = icmp ult v0, v3 ; v3 = 2
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
; }
|
; }
|
||||||
|
|
||||||
function %icmp_ule_umax(i32) -> i8 {
|
function %icmp_ule_umax(i32) -> i8 {
|
||||||
@@ -366,6 +517,22 @@ block0(v0: i32):
|
|||||||
; return v3 ; v3 = 1
|
; return v3 ; v3 = 1
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ule_umax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0xFFFF_FFFE
|
||||||
|
v2 = icmp ule v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ule_umax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0xffff_ffff
|
||||||
|
; v5 = icmp ne v0, v3 ; v3 = 0xffff_ffff
|
||||||
|
; v6 -> v5
|
||||||
|
; v7 -> v6
|
||||||
|
; return v5
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ule_smin(i32) -> i8 {
|
function %icmp_ule_smin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x8000_0000
|
v1 = iconst.i32 0x8000_0000
|
||||||
@@ -375,9 +542,25 @@ block0(v0: i32):
|
|||||||
|
|
||||||
; function %icmp_ule_smin(i32) -> i8 fast {
|
; function %icmp_ule_smin(i32) -> i8 fast {
|
||||||
; block0(v0: i32):
|
; block0(v0: i32):
|
||||||
; v1 = iconst.i32 0x8000_0000
|
; v3 = iconst.i32 0x8000_0001
|
||||||
; v2 = icmp ule v0, v1 ; v1 = 0x8000_0000
|
; v4 = icmp ult v0, v3 ; v3 = 0x8000_0001
|
||||||
; return v2
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
|
; }
|
||||||
|
|
||||||
|
function %icmp_ule_smin_plus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x8000_0001
|
||||||
|
v2 = icmp ule v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ule_smin_plus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0x8000_0002
|
||||||
|
; v4 = icmp ult v0, v3 ; v3 = 0x8000_0002
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
; }
|
; }
|
||||||
|
|
||||||
function %icmp_ule_smax(i32) -> i8 {
|
function %icmp_ule_smax(i32) -> i8 {
|
||||||
@@ -389,9 +572,25 @@ block0(v0: i32):
|
|||||||
|
|
||||||
; function %icmp_ule_smax(i32) -> i8 fast {
|
; function %icmp_ule_smax(i32) -> i8 fast {
|
||||||
; block0(v0: i32):
|
; block0(v0: i32):
|
||||||
; v1 = iconst.i32 0x7fff_ffff
|
; v3 = iconst.i32 0x8000_0000
|
||||||
; v2 = icmp ule v0, v1 ; v1 = 0x7fff_ffff
|
; v4 = icmp ult v0, v3 ; v3 = 0x8000_0000
|
||||||
; return v2
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
|
; }
|
||||||
|
|
||||||
|
function %icmp_ule_smax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x7FFF_FFFE
|
||||||
|
v2 = icmp ule v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ule_smax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0x7fff_ffff
|
||||||
|
; v4 = icmp ult v0, v3 ; v3 = 0x7fff_ffff
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
; }
|
; }
|
||||||
|
|
||||||
function %icmp_ugt_umin(i32) -> i8 {
|
function %icmp_ugt_umin(i32) -> i8 {
|
||||||
@@ -409,6 +608,20 @@ block0(v0: i32):
|
|||||||
; return v3
|
; return v3
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ugt_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 1
|
||||||
|
v2 = icmp ugt v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ugt_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 1
|
||||||
|
; v2 = icmp ugt v0, v1 ; v1 = 1
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ugt_umax(i32) -> i8 {
|
function %icmp_ugt_umax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0xFFFF_FFFF
|
v1 = iconst.i32 0xFFFF_FFFF
|
||||||
@@ -422,6 +635,21 @@ block0(v0: i32):
|
|||||||
; return v3 ; v3 = 0
|
; return v3 ; v3 = 0
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ugt_umax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0xFFFF_FFFE
|
||||||
|
v2 = icmp ugt v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ugt_umax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0xffff_ffff
|
||||||
|
; v4 = icmp eq v0, v3 ; v3 = 0xffff_ffff
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ugt_smin(i32) -> i8 {
|
function %icmp_ugt_smin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x8000_0000
|
v1 = iconst.i32 0x8000_0000
|
||||||
@@ -436,6 +664,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ugt_smin_plus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x8000_0001
|
||||||
|
v2 = icmp ugt v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ugt_smin_plus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0x8000_0001
|
||||||
|
; v2 = icmp ugt v0, v1 ; v1 = 0x8000_0001
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_ugt_smax(i32) -> i8 {
|
function %icmp_ugt_smax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x7FFF_FFFF
|
v1 = iconst.i32 0x7FFF_FFFF
|
||||||
@@ -450,6 +692,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_ugt_smax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x7FFF_FFFE
|
||||||
|
v2 = icmp ugt v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_ugt_smax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0x7fff_fffe
|
||||||
|
; v2 = icmp ugt v0, v1 ; v1 = 0x7fff_fffe
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_uge_umin(i32) -> i8 {
|
function %icmp_uge_umin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0
|
v1 = iconst.i32 0
|
||||||
@@ -463,6 +719,22 @@ block0(v0: i32):
|
|||||||
; return v3 ; v3 = 1
|
; return v3 ; v3 = 1
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_uge_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 1
|
||||||
|
v2 = icmp uge v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_uge_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0
|
||||||
|
; v5 = icmp ne v0, v3 ; v3 = 0
|
||||||
|
; v6 -> v5
|
||||||
|
; v7 -> v6
|
||||||
|
; return v5
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_uge_umax(i32) -> i8 {
|
function %icmp_uge_umax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0xFFFF_FFFF
|
v1 = iconst.i32 0xFFFF_FFFF
|
||||||
@@ -474,10 +746,27 @@ block0(v0: i32):
|
|||||||
; block0(v0: i32):
|
; block0(v0: i32):
|
||||||
; v1 = iconst.i32 0xffff_ffff
|
; v1 = iconst.i32 0xffff_ffff
|
||||||
; v3 = icmp eq v0, v1 ; v1 = 0xffff_ffff
|
; v3 = icmp eq v0, v1 ; v1 = 0xffff_ffff
|
||||||
; v4 -> v3
|
; v6 -> v3
|
||||||
|
; v7 -> v3
|
||||||
|
; v8 -> v6
|
||||||
; return v3
|
; return v3
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_uge_umax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0xFFFF_FFFE
|
||||||
|
v2 = icmp uge v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_uge_umax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0xffff_fffd
|
||||||
|
; v4 = icmp ugt v0, v3 ; v3 = 0xffff_fffd
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_uge_smin(i32) -> i8 {
|
function %icmp_uge_smin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x8000_0000
|
v1 = iconst.i32 0x8000_0000
|
||||||
@@ -487,9 +776,25 @@ block0(v0: i32):
|
|||||||
|
|
||||||
; function %icmp_uge_smin(i32) -> i8 fast {
|
; function %icmp_uge_smin(i32) -> i8 fast {
|
||||||
; block0(v0: i32):
|
; block0(v0: i32):
|
||||||
; v1 = iconst.i32 0x8000_0000
|
; v3 = iconst.i32 0x7fff_ffff
|
||||||
; v2 = icmp uge v0, v1 ; v1 = 0x8000_0000
|
; v4 = icmp ugt v0, v3 ; v3 = 0x7fff_ffff
|
||||||
; return v2
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
|
; }
|
||||||
|
|
||||||
|
function %icmp_uge_smin_plus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x8000_0001
|
||||||
|
v2 = icmp uge v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_uge_smin_plus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0x8000_0000
|
||||||
|
; v4 = icmp ugt v0, v3 ; v3 = 0x8000_0000
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
; }
|
; }
|
||||||
|
|
||||||
function %icmp_uge_smax(i32) -> i8 {
|
function %icmp_uge_smax(i32) -> i8 {
|
||||||
@@ -501,9 +806,25 @@ block0(v0: i32):
|
|||||||
|
|
||||||
; function %icmp_uge_smax(i32) -> i8 fast {
|
; function %icmp_uge_smax(i32) -> i8 fast {
|
||||||
; block0(v0: i32):
|
; block0(v0: i32):
|
||||||
; v1 = iconst.i32 0x7fff_ffff
|
; v3 = iconst.i32 0x7fff_fffe
|
||||||
; v2 = icmp uge v0, v1 ; v1 = 0x7fff_ffff
|
; v4 = icmp ugt v0, v3 ; v3 = 0x7fff_fffe
|
||||||
; return v2
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
|
; }
|
||||||
|
|
||||||
|
function %icmp_uge_smax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x7FFF_FFFE
|
||||||
|
v2 = icmp uge v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_uge_smax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0x7fff_fffd
|
||||||
|
; v4 = icmp ugt v0, v3 ; v3 = 0x7fff_fffd
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
; }
|
; }
|
||||||
|
|
||||||
function %icmp_slt_umin(i32) -> i8 {
|
function %icmp_slt_umin(i32) -> i8 {
|
||||||
@@ -520,6 +841,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_slt_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 1
|
||||||
|
v2 = icmp slt v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_slt_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 1
|
||||||
|
; v2 = icmp slt v0, v1 ; v1 = 1
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_slt_umax(i32) -> i8 {
|
function %icmp_slt_umax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0xFFFF_FFFF
|
v1 = iconst.i32 0xFFFF_FFFF
|
||||||
@@ -534,6 +869,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_slt_umax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0xFFFF_FFFE
|
||||||
|
v2 = icmp slt v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_slt_umax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0xffff_fffe
|
||||||
|
; v2 = icmp slt v0, v1 ; v1 = 0xffff_fffe
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_slt_smin(i32) -> i8 {
|
function %icmp_slt_smin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x8000_0000
|
v1 = iconst.i32 0x8000_0000
|
||||||
@@ -547,6 +896,21 @@ block0(v0: i32):
|
|||||||
; return v3 ; v3 = 0
|
; return v3 ; v3 = 0
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_slt_smin_plus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x8000_0001
|
||||||
|
v2 = icmp slt v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_slt_smin_plus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0x8000_0000
|
||||||
|
; v4 = icmp eq v0, v3 ; v3 = 0x8000_0000
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_slt_smax(i32) -> i8 {
|
function %icmp_slt_smax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x7FFF_FFFF
|
v1 = iconst.i32 0x7FFF_FFFF
|
||||||
@@ -562,6 +926,20 @@ block0(v0: i32):
|
|||||||
; return v3
|
; return v3
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_slt_smax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x7FFF_FFFE
|
||||||
|
v2 = icmp slt v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_slt_smax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0x7fff_fffe
|
||||||
|
; v2 = icmp slt v0, v1 ; v1 = 0x7fff_fffe
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_sle_umin(i32) -> i8 {
|
function %icmp_sle_umin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0
|
v1 = iconst.i32 0
|
||||||
@@ -571,9 +949,25 @@ block0(v0: i32):
|
|||||||
|
|
||||||
; function %icmp_sle_umin(i32) -> i8 fast {
|
; function %icmp_sle_umin(i32) -> i8 fast {
|
||||||
; block0(v0: i32):
|
; block0(v0: i32):
|
||||||
; v1 = iconst.i32 0
|
; v3 = iconst.i32 1
|
||||||
; v2 = icmp sle v0, v1 ; v1 = 0
|
; v4 = icmp slt v0, v3 ; v3 = 1
|
||||||
; return v2
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
|
; }
|
||||||
|
|
||||||
|
function %icmp_sle_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 1
|
||||||
|
v2 = icmp sle v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_sle_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 2
|
||||||
|
; v4 = icmp slt v0, v3 ; v3 = 2
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
; }
|
; }
|
||||||
|
|
||||||
function %icmp_sle_umax(i32) -> i8 {
|
function %icmp_sle_umax(i32) -> i8 {
|
||||||
@@ -585,9 +979,25 @@ block0(v0: i32):
|
|||||||
|
|
||||||
; function %icmp_sle_umax(i32) -> i8 fast {
|
; function %icmp_sle_umax(i32) -> i8 fast {
|
||||||
; block0(v0: i32):
|
; block0(v0: i32):
|
||||||
; v1 = iconst.i32 0xffff_ffff
|
; v3 = iconst.i32 0x0001_0000_0000
|
||||||
; v2 = icmp sle v0, v1 ; v1 = 0xffff_ffff
|
; v4 = icmp slt v0, v3 ; v3 = 0x0001_0000_0000
|
||||||
; return v2
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
|
; }
|
||||||
|
|
||||||
|
function %icmp_sle_umax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0xFFFF_FFFE
|
||||||
|
v2 = icmp sle v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_sle_umax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0xffff_ffff
|
||||||
|
; v4 = icmp slt v0, v3 ; v3 = 0xffff_ffff
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
; }
|
; }
|
||||||
|
|
||||||
function %icmp_sle_smin(i32) -> i8 {
|
function %icmp_sle_smin(i32) -> i8 {
|
||||||
@@ -600,9 +1010,26 @@ block0(v0: i32):
|
|||||||
; function %icmp_sle_smin(i32) -> i8 fast {
|
; function %icmp_sle_smin(i32) -> i8 fast {
|
||||||
; block0(v0: i32):
|
; block0(v0: i32):
|
||||||
; v1 = iconst.i32 0x8000_0000
|
; v1 = iconst.i32 0x8000_0000
|
||||||
; v3 = icmp eq v0, v1 ; v1 = 0x8000_0000
|
; v5 = icmp eq v0, v1 ; v1 = 0x8000_0000
|
||||||
; v4 -> v3
|
; v6 -> v5
|
||||||
; return v3
|
; v8 -> v5
|
||||||
|
; v7 -> v6
|
||||||
|
; return v5
|
||||||
|
; }
|
||||||
|
|
||||||
|
function %icmp_sle_smin_plus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x8000_0001
|
||||||
|
v2 = icmp sle v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_sle_smin_plus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0x8000_0002
|
||||||
|
; v4 = icmp slt v0, v3 ; v3 = 0x8000_0002
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
; }
|
; }
|
||||||
|
|
||||||
function %icmp_sle_smax(i32) -> i8 {
|
function %icmp_sle_smax(i32) -> i8 {
|
||||||
@@ -618,6 +1045,22 @@ block0(v0: i32):
|
|||||||
; return v3 ; v3 = 1
|
; return v3 ; v3 = 1
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_sle_smax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x7FFF_FFFE
|
||||||
|
v2 = icmp sle v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_sle_smax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0x7fff_ffff
|
||||||
|
; v5 = icmp ne v0, v3 ; v3 = 0x7fff_ffff
|
||||||
|
; v6 -> v5
|
||||||
|
; v7 -> v6
|
||||||
|
; return v5
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_sgt_umin(i32) -> i8 {
|
function %icmp_sgt_umin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0
|
v1 = iconst.i32 0
|
||||||
@@ -632,6 +1075,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_sgt_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 1
|
||||||
|
v2 = icmp sgt v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_sgt_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 1
|
||||||
|
; v2 = icmp sgt v0, v1 ; v1 = 1
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_sgt_umax(i32) -> i8 {
|
function %icmp_sgt_umax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0xFFFF_FFFF
|
v1 = iconst.i32 0xFFFF_FFFF
|
||||||
@@ -646,6 +1103,20 @@ block0(v0: i32):
|
|||||||
; return v2
|
; return v2
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_sgt_umax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0xFFFF_FFFE
|
||||||
|
v2 = icmp sgt v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_sgt_umax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0xffff_fffe
|
||||||
|
; v2 = icmp sgt v0, v1 ; v1 = 0xffff_fffe
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_sgt_smin(i32) -> i8 {
|
function %icmp_sgt_smin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x8000_0000
|
v1 = iconst.i32 0x8000_0000
|
||||||
@@ -661,6 +1132,20 @@ block0(v0: i32):
|
|||||||
; return v3
|
; return v3
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_sgt_smin_plus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x8000_0001
|
||||||
|
v2 = icmp sgt v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_sgt_smin_plus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v1 = iconst.i32 0x8000_0001
|
||||||
|
; v2 = icmp sgt v0, v1 ; v1 = 0x8000_0001
|
||||||
|
; return v2
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_sgt_smax(i32) -> i8 {
|
function %icmp_sgt_smax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x7FFF_FFFF
|
v1 = iconst.i32 0x7FFF_FFFF
|
||||||
@@ -674,6 +1159,21 @@ block0(v0: i32):
|
|||||||
; return v3 ; v3 = 0
|
; return v3 ; v3 = 0
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_sgt_smax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x7FFF_FFFE
|
||||||
|
v2 = icmp sgt v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_sgt_smax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0x7fff_ffff
|
||||||
|
; v4 = icmp eq v0, v3 ; v3 = 0x7fff_ffff
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_sge_umin(i32) -> i8 {
|
function %icmp_sge_umin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0
|
v1 = iconst.i32 0
|
||||||
@@ -683,9 +1183,25 @@ block0(v0: i32):
|
|||||||
|
|
||||||
; function %icmp_sge_umin(i32) -> i8 fast {
|
; function %icmp_sge_umin(i32) -> i8 fast {
|
||||||
; block0(v0: i32):
|
; block0(v0: i32):
|
||||||
; v1 = iconst.i32 0
|
; v3 = iconst.i32 -1
|
||||||
; v2 = icmp sge v0, v1 ; v1 = 0
|
; v4 = icmp sgt v0, v3 ; v3 = -1
|
||||||
; return v2
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
|
; }
|
||||||
|
|
||||||
|
function %icmp_sge_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 1
|
||||||
|
v2 = icmp sge v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_sge_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0
|
||||||
|
; v4 = icmp sgt v0, v3 ; v3 = 0
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
; }
|
; }
|
||||||
|
|
||||||
function %icmp_sge_umax(i32) -> i8 {
|
function %icmp_sge_umax(i32) -> i8 {
|
||||||
@@ -697,9 +1213,25 @@ block0(v0: i32):
|
|||||||
|
|
||||||
; function %icmp_sge_umax(i32) -> i8 fast {
|
; function %icmp_sge_umax(i32) -> i8 fast {
|
||||||
; block0(v0: i32):
|
; block0(v0: i32):
|
||||||
; v1 = iconst.i32 0xffff_ffff
|
; v3 = iconst.i32 0xffff_fffe
|
||||||
; v2 = icmp sge v0, v1 ; v1 = 0xffff_ffff
|
; v4 = icmp sgt v0, v3 ; v3 = 0xffff_fffe
|
||||||
; return v2
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
|
; }
|
||||||
|
|
||||||
|
function %icmp_sge_umax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0xFFFF_FFFE
|
||||||
|
v2 = icmp sge v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_sge_umax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0xffff_fffd
|
||||||
|
; v4 = icmp sgt v0, v3 ; v3 = 0xffff_fffd
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
; }
|
; }
|
||||||
|
|
||||||
function %icmp_sge_smin(i32) -> i8 {
|
function %icmp_sge_smin(i32) -> i8 {
|
||||||
@@ -715,6 +1247,22 @@ block0(v0: i32):
|
|||||||
; return v3 ; v3 = 1
|
; return v3 ; v3 = 1
|
||||||
; }
|
; }
|
||||||
|
|
||||||
|
function %icmp_sge_smin_plus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x8000_0001
|
||||||
|
v2 = icmp sge v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_sge_smin_plus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0x8000_0000
|
||||||
|
; v5 = icmp ne v0, v3 ; v3 = 0x8000_0000
|
||||||
|
; v6 -> v5
|
||||||
|
; v7 -> v6
|
||||||
|
; return v5
|
||||||
|
; }
|
||||||
|
|
||||||
function %icmp_sge_smax(i32) -> i8 {
|
function %icmp_sge_smax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x7FFF_FFFF
|
v1 = iconst.i32 0x7FFF_FFFF
|
||||||
@@ -725,9 +1273,26 @@ block0(v0: i32):
|
|||||||
; function %icmp_sge_smax(i32) -> i8 fast {
|
; function %icmp_sge_smax(i32) -> i8 fast {
|
||||||
; block0(v0: i32):
|
; block0(v0: i32):
|
||||||
; v1 = iconst.i32 0x7fff_ffff
|
; v1 = iconst.i32 0x7fff_ffff
|
||||||
; v3 = icmp eq v0, v1 ; v1 = 0x7fff_ffff
|
; v5 = icmp eq v0, v1 ; v1 = 0x7fff_ffff
|
||||||
; v4 -> v3
|
; v6 -> v5
|
||||||
; return v3
|
; v8 -> v5
|
||||||
|
; v7 -> v6
|
||||||
|
; return v5
|
||||||
|
; }
|
||||||
|
|
||||||
|
function %icmp_sge_smax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x7FFF_FFFE
|
||||||
|
v2 = icmp sge v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
|
; function %icmp_sge_smax_minus_1(i32) -> i8 fast {
|
||||||
|
; block0(v0: i32):
|
||||||
|
; v3 = iconst.i32 0x7fff_fffd
|
||||||
|
; v4 = icmp sgt v0, v3 ; v3 = 0x7fff_fffd
|
||||||
|
; v5 -> v4
|
||||||
|
; return v4
|
||||||
; }
|
; }
|
||||||
|
|
||||||
function %icmp_and_eq_eq(i32, i32) -> i8 {
|
function %icmp_and_eq_eq(i32, i32) -> i8 {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
cd $(dirname "$0")
|
cd $(dirname "$0")
|
||||||
out=parameterized-icmp.clif
|
out=icmp-parameterized.clif
|
||||||
CCS="eq ne ult ule ugt uge slt sle sgt sge"
|
CCS="eq ne ult ule ugt uge slt sle sgt sge"
|
||||||
|
|
||||||
function main {
|
function main {
|
||||||
@@ -43,6 +43,13 @@ block0(v0: i32):
|
|||||||
return v2
|
return v2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function %icmp_${cc}_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 1
|
||||||
|
v2 = icmp ${cc} v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
function %icmp_${cc}_umax(i32) -> i8 {
|
function %icmp_${cc}_umax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0xFFFF_FFFF
|
v1 = iconst.i32 0xFFFF_FFFF
|
||||||
@@ -50,6 +57,13 @@ block0(v0: i32):
|
|||||||
return v2
|
return v2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function %icmp_${cc}_umax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0xFFFF_FFFE
|
||||||
|
v2 = icmp ${cc} v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
function %icmp_${cc}_smin(i32) -> i8 {
|
function %icmp_${cc}_smin(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x8000_0000
|
v1 = iconst.i32 0x8000_0000
|
||||||
@@ -57,6 +71,13 @@ block0(v0: i32):
|
|||||||
return v2
|
return v2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function %icmp_${cc}_smin_plus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x8000_0001
|
||||||
|
v2 = icmp ${cc} v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
function %icmp_${cc}_smax(i32) -> i8 {
|
function %icmp_${cc}_smax(i32) -> i8 {
|
||||||
block0(v0: i32):
|
block0(v0: i32):
|
||||||
v1 = iconst.i32 0x7FFF_FFFF
|
v1 = iconst.i32 0x7FFF_FFFF
|
||||||
@@ -64,6 +85,13 @@ block0(v0: i32):
|
|||||||
return v2
|
return v2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function %icmp_${cc}_smax_minus_1(i32) -> i8 {
|
||||||
|
block0(v0: i32):
|
||||||
|
v1 = iconst.i32 0x7FFF_FFFE
|
||||||
|
v2 = icmp ${cc} v0, v1
|
||||||
|
return v2
|
||||||
|
}
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user