cranelift: Remove redundant branch and select instructions (#5097)

As discussed in the 2022/10/19 meeting, this PR removes many of the branch and select instructions that used iflags, in favor if using brz/brnz and select in their place. Additionally, it reworks selectif_spectre_guard to take an i8 input instead of an iflags input.

For reference, the removed instructions are: br_icmp, brif, brff, trueif, trueff, and selectif.
This commit is contained in:
Trevor Elliott
2022-10-24 16:14:35 -07:00
committed by GitHub
parent 30589170b4
commit ec12415b1f
40 changed files with 579 additions and 2527 deletions

View File

@@ -151,8 +151,8 @@ block0(v0: i128, v1: i128):
function %f(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = ifcmp v0, v1
brif eq v2, block1
v2 = icmp eq v0, v1
brnz v2, block1
jump block2
block1:
@@ -176,8 +176,8 @@ block2:
function %f(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = ifcmp v0, v1
brif eq v2, block1
v2 = icmp eq v0, v1
brnz v2, block1
jump block1
block1:
@@ -238,7 +238,8 @@ block1:
function %i128_bricmp_eq(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp eq v0, v1, block1
v2 = icmp eq v0, v1
brnz v2, block1
jump block1
block1:
@@ -258,7 +259,8 @@ block1:
function %i128_bricmp_ne(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp ne v0, v1, block1
v2 = icmp ne v0, v1
brnz v2, block1
jump block1
block1:
@@ -278,7 +280,8 @@ block1:
function %i128_bricmp_slt(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp slt v0, v1, block1
v2 = icmp slt v0, v1
brnz v2, block1
jump block1
block1:
@@ -302,7 +305,8 @@ block1:
function %i128_bricmp_ult(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp ult v0, v1, block1
v2 = icmp ult v0, v1
brnz v2, block1
jump block1
block1:
@@ -326,7 +330,8 @@ block1:
function %i128_bricmp_sle(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp sle v0, v1, block1
v2 = icmp sle v0, v1
brnz v2, block1
jump block1
block1:
@@ -351,7 +356,8 @@ block1:
function %i128_bricmp_ule(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp ule v0, v1, block1
v2 = icmp ule v0, v1
brnz v2, block1
jump block1
block1:
@@ -376,7 +382,8 @@ block1:
function %i128_bricmp_sgt(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp sgt v0, v1, block1
v2 = icmp sgt v0, v1
brnz v2, block1
jump block1
block1:
@@ -400,7 +407,8 @@ block1:
function %i128_bricmp_ugt(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp ugt v0, v1, block1
v2 = icmp ugt v0, v1
brnz v2, block1
jump block1
block1:
@@ -424,7 +432,8 @@ block1:
function %i128_bricmp_sge(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp sge v0, v1, block1
v2 = icmp sge v0, v1
brnz v2, block1
jump block1
block1:
@@ -449,7 +458,8 @@ block1:
function %i128_bricmp_uge(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp uge v0, v1, block1
v2 = icmp uge v0, v1
brnz v2, block1
jump block1
block1:

View File

@@ -5,8 +5,8 @@ target aarch64
function %f(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i8 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -19,8 +19,8 @@ block0(v0: i8, v1: i8, v2: i8):
function %f(i8, i16, i16) -> i16 {
block0(v0: i8, v1: i16, v2: i16):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i16 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -33,8 +33,8 @@ block0(v0: i8, v1: i16, v2: i16):
function %f(i8, i32, i32) -> i32 {
block0(v0: i8, v1: i32, v2: i32):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i32 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -47,8 +47,8 @@ block0(v0: i8, v1: i32, v2: i32):
function %f(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i64 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -61,8 +61,8 @@ block0(v0: i8, v1: i64, v2: i64):
function %f(i8, i128, i128) -> i128 {
block0(v0: i8, v1: i128, v2: i128):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i128 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -76,8 +76,8 @@ block0(v0: i8, v1: i128, v2: i128):
function %f(i16, i8, i8) -> i8 {
block0(v0: i16, v1: i8, v2: i8):
v3 = iconst.i16 42
v4 = ifcmp v0, v3
v5 = selectif.i8 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -90,8 +90,8 @@ block0(v0: i16, v1: i8, v2: i8):
function %f(i16, i16, i16) -> i16 {
block0(v0: i16, v1: i16, v2: i16):
v3 = iconst.i16 42
v4 = ifcmp v0, v3
v5 = selectif.i16 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -104,8 +104,8 @@ block0(v0: i16, v1: i16, v2: i16):
function %f(i16, i32, i32) -> i32 {
block0(v0: i16, v1: i32, v2: i32):
v3 = iconst.i16 42
v4 = ifcmp v0, v3
v5 = selectif.i32 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -118,8 +118,8 @@ block0(v0: i16, v1: i32, v2: i32):
function %f(i16, i64, i64) -> i64 {
block0(v0: i16, v1: i64, v2: i64):
v3 = iconst.i16 42
v4 = ifcmp v0, v3
v5 = selectif.i64 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -132,8 +132,8 @@ block0(v0: i16, v1: i64, v2: i64):
function %f(i16, i128, i128) -> i128 {
block0(v0: i16, v1: i128, v2: i128):
v3 = iconst.i16 42
v4 = ifcmp v0, v3
v5 = selectif.i128 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -147,8 +147,8 @@ block0(v0: i16, v1: i128, v2: i128):
function %f(i32, i8, i8) -> i8 {
block0(v0: i32, v1: i8, v2: i8):
v3 = iconst.i32 42
v4 = ifcmp v0, v3
v5 = selectif.i8 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -160,8 +160,8 @@ block0(v0: i32, v1: i8, v2: i8):
function %f(i32, i16, i16) -> i16 {
block0(v0: i32, v1: i16, v2: i16):
v3 = iconst.i32 42
v4 = ifcmp v0, v3
v5 = selectif.i16 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -173,8 +173,8 @@ block0(v0: i32, v1: i16, v2: i16):
function %f(i32, i32, i32) -> i32 {
block0(v0: i32, v1: i32, v2: i32):
v3 = iconst.i32 42
v4 = ifcmp v0, v3
v5 = selectif.i32 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -186,8 +186,8 @@ block0(v0: i32, v1: i32, v2: i32):
function %f(i32, i64, i64) -> i64 {
block0(v0: i32, v1: i64, v2: i64):
v3 = iconst.i32 42
v4 = ifcmp v0, v3
v5 = selectif.i64 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -199,8 +199,8 @@ block0(v0: i32, v1: i64, v2: i64):
function %f(i32, i128, i128) -> i128 {
block0(v0: i32, v1: i128, v2: i128):
v3 = iconst.i32 42
v4 = ifcmp v0, v3
v5 = selectif.i128 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -213,8 +213,8 @@ block0(v0: i32, v1: i128, v2: i128):
function %f(i64, i8, i8) -> i8 {
block0(v0: i64, v1: i8, v2: i8):
v3 = iconst.i64 42
v4 = ifcmp v0, v3
v5 = selectif.i8 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -226,8 +226,8 @@ block0(v0: i64, v1: i8, v2: i8):
function %f(i64, i16, i16) -> i16 {
block0(v0: i64, v1: i16, v2: i16):
v3 = iconst.i64 42
v4 = ifcmp v0, v3
v5 = selectif.i16 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -239,8 +239,8 @@ block0(v0: i64, v1: i16, v2: i16):
function %f(i64, i32, i32) -> i32 {
block0(v0: i64, v1: i32, v2: i32):
v3 = iconst.i64 42
v4 = ifcmp v0, v3
v5 = selectif.i32 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -252,8 +252,8 @@ block0(v0: i64, v1: i32, v2: i32):
function %f(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
v3 = iconst.i64 42
v4 = ifcmp v0, v3
v5 = selectif.i64 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -265,8 +265,8 @@ block0(v0: i64, v1: i64, v2: i64):
function %f(i64, i128, i128) -> i128 {
block0(v0: i64, v1: i128, v2: i128):
v3 = iconst.i64 42
v4 = ifcmp v0, v3
v5 = selectif.i128 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select v4, v1, v2
return v5
}
@@ -280,8 +280,8 @@ function %f(i128, i8, i8) -> i8 {
block0(v0: i128, v1: i8, v2: i8):
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif.i8 eq v5, v1, v2
v5 = icmp eq v0, v4
v6 = select.i8 v5, v1, v2
return v6
}
@@ -297,8 +297,8 @@ function %f(i128, i16, i16) -> i16 {
block0(v0: i128, v1: i16, v2: i16):
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif.i16 eq v5, v1, v2
v5 = icmp eq v0, v4
v6 = select.i16 v5, v1, v2
return v6
}
@@ -314,8 +314,8 @@ function %f(i128, i32, i32) -> i32 {
block0(v0: i128, v1: i32, v2: i32):
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif.i32 eq v5, v1, v2
v5 = icmp eq v0, v4
v6 = select.i32 v5, v1, v2
return v6
}
@@ -331,8 +331,8 @@ function %f(i128, i64, i64) -> i64 {
block0(v0: i128, v1: i64, v2: i64):
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif.i64 eq v5, v1, v2
v5 = icmp eq v0, v4
v6 = select.i64 v5, v1, v2
return v6
}
@@ -348,8 +348,8 @@ function %f(i128, i128, i128) -> i128 {
block0(v0: i128, v1: i128, v2: i128):
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif.i128 eq v5, v1, v2
v5 = icmp eq v0, v4
v6 = select.i128 v5, v1, v2
return v6
}
@@ -365,8 +365,8 @@ block0(v0: i128, v1: i128, v2: i128):
function %f(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i8 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i8 v4, v1, v2
return v5
}
@@ -380,8 +380,8 @@ block0(v0: i8, v1: i8, v2: i8):
function %f(i8, i16, i16) -> i16 {
block0(v0: i8, v1: i16, v2: i16):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i16 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i16 v4, v1, v2
return v5
}
@@ -395,8 +395,8 @@ block0(v0: i8, v1: i16, v2: i16):
function %f(i8, i32, i32) -> i32 {
block0(v0: i8, v1: i32, v2: i32):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i32 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i32 v4, v1, v2
return v5
}
@@ -410,8 +410,8 @@ block0(v0: i8, v1: i32, v2: i32):
function %f(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i64 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i64 v4, v1, v2
return v5
}
@@ -425,8 +425,8 @@ block0(v0: i8, v1: i64, v2: i64):
function %f(i8, i128, i128) -> i128 {
block0(v0: i8, v1: i128, v2: i128):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i128 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i128 v4, v1, v2
return v5
}
@@ -441,8 +441,8 @@ block0(v0: i8, v1: i128, v2: i128):
function %f(i16, i8, i8) -> i8 {
block0(v0: i16, v1: i8, v2: i8):
v3 = iconst.i16 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i8 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i8 v4, v1, v2
return v5
}
@@ -456,8 +456,8 @@ block0(v0: i16, v1: i8, v2: i8):
function %f(i16, i16, i16) -> i16 {
block0(v0: i16, v1: i16, v2: i16):
v3 = iconst.i16 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i16 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i16 v4, v1, v2
return v5
}
@@ -471,8 +471,8 @@ block0(v0: i16, v1: i16, v2: i16):
function %f(i16, i32, i32) -> i32 {
block0(v0: i16, v1: i32, v2: i32):
v3 = iconst.i16 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i32 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i32 v4, v1, v2
return v5
}
@@ -486,8 +486,8 @@ block0(v0: i16, v1: i32, v2: i32):
function %f(i16, i64, i64) -> i64 {
block0(v0: i16, v1: i64, v2: i64):
v3 = iconst.i16 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i64 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i64 v4, v1, v2
return v5
}
@@ -501,8 +501,8 @@ block0(v0: i16, v1: i64, v2: i64):
function %f(i16, i128, i128) -> i128 {
block0(v0: i16, v1: i128, v2: i128):
v3 = iconst.i16 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i128 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i128 v4, v1, v2
return v5
}
@@ -517,8 +517,8 @@ block0(v0: i16, v1: i128, v2: i128):
function %f(i32, i8, i8) -> i8 {
block0(v0: i32, v1: i8, v2: i8):
v3 = iconst.i32 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i8 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i8 v4, v1, v2
return v5
}
@@ -531,8 +531,8 @@ block0(v0: i32, v1: i8, v2: i8):
function %f(i32, i16, i16) -> i16 {
block0(v0: i32, v1: i16, v2: i16):
v3 = iconst.i32 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i16 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i16 v4, v1, v2
return v5
}
@@ -545,8 +545,8 @@ block0(v0: i32, v1: i16, v2: i16):
function %f(i32, i32, i32) -> i32 {
block0(v0: i32, v1: i32, v2: i32):
v3 = iconst.i32 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i32 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i32 v4, v1, v2
return v5
}
@@ -559,8 +559,8 @@ block0(v0: i32, v1: i32, v2: i32):
function %f(i32, i64, i64) -> i64 {
block0(v0: i32, v1: i64, v2: i64):
v3 = iconst.i32 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i64 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i64 v4, v1, v2
return v5
}
@@ -573,8 +573,8 @@ block0(v0: i32, v1: i64, v2: i64):
function %f(i32, i128, i128) -> i128 {
block0(v0: i32, v1: i128, v2: i128):
v3 = iconst.i32 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i128 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i128 v4, v1, v2
return v5
}
@@ -588,8 +588,8 @@ block0(v0: i32, v1: i128, v2: i128):
function %f(i64, i8, i8) -> i8 {
block0(v0: i64, v1: i8, v2: i8):
v3 = iconst.i64 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i8 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i8 v4, v1, v2
return v5
}
@@ -602,8 +602,8 @@ block0(v0: i64, v1: i8, v2: i8):
function %f(i64, i16, i16) -> i16 {
block0(v0: i64, v1: i16, v2: i16):
v3 = iconst.i64 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i16 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i16 v4, v1, v2
return v5
}
@@ -616,8 +616,8 @@ block0(v0: i64, v1: i16, v2: i16):
function %f(i64, i32, i32) -> i32 {
block0(v0: i64, v1: i32, v2: i32):
v3 = iconst.i64 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i32 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i32 v4, v1, v2
return v5
}
@@ -630,8 +630,8 @@ block0(v0: i64, v1: i32, v2: i32):
function %f(i64, i64, i64) -> i64 {
block0(v0: i64, v1: i64, v2: i64):
v3 = iconst.i64 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i64 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i64 v4, v1, v2
return v5
}
@@ -644,8 +644,8 @@ block0(v0: i64, v1: i64, v2: i64):
function %f(i64, i128, i128) -> i128 {
block0(v0: i64, v1: i128, v2: i128):
v3 = iconst.i64 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i128 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i128 v4, v1, v2
return v5
}
@@ -660,8 +660,8 @@ function %f(i128, i8, i8) -> i8 {
block0(v0: i128, v1: i8, v2: i8):
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif_spectre_guard.i8 eq v5, v1, v2
v5 = icmp eq v0, v4
v6 = select_spectre_guard.i8 v5, v1, v2
return v6
}
@@ -678,8 +678,8 @@ function %f(i128, i16, i16) -> i16 {
block0(v0: i128, v1: i16, v2: i16):
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif_spectre_guard.i16 eq v5, v1, v2
v5 = icmp eq v0, v4
v6 = select_spectre_guard.i16 v5, v1, v2
return v6
}
@@ -696,8 +696,8 @@ function %f(i128, i32, i32) -> i32 {
block0(v0: i128, v1: i32, v2: i32):
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif_spectre_guard.i32 eq v5, v1, v2
v5 = icmp eq v0, v4
v6 = select_spectre_guard.i32 v5, v1, v2
return v6
}
@@ -714,8 +714,8 @@ function %f(i128, i64, i64) -> i64 {
block0(v0: i128, v1: i64, v2: i64):
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif_spectre_guard.i64 eq v5, v1, v2
v5 = icmp eq v0, v4
v6 = select_spectre_guard.i64 v5, v1, v2
return v6
}
@@ -732,8 +732,8 @@ function %f(i128, i128, i128) -> i128 {
block0(v0: i128, v1: i128, v2: i128):
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif_spectre_guard.i128 eq v5, v1, v2
v5 = icmp eq v0, v4
v6 = select_spectre_guard.i128 v5, v1, v2
return v6
}
@@ -750,9 +750,8 @@ block0(v0: i128, v1: i128, v2: i128):
function %g(i8) -> i8 {
block0(v0: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = trueif eq v4
return v5
v4 = icmp eq v0, v3
return v4
}
; block0:

View File

@@ -114,8 +114,8 @@ block0(v0: i128, v1: i128):
function %f(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = ifcmp v0, v1
brif eq v2, block1
v2 = icmp eq v0, v1
brnz v2, block1
jump block2
block1:
@@ -139,8 +139,8 @@ block2:
function %f(i64, i64) -> i64 {
block0(v0: i64, v1: i64):
v2 = ifcmp v0, v1
brif eq v2, block1
v2 = icmp eq v0, v1
brnz v2, block1
jump block1
block1:
@@ -201,7 +201,8 @@ block1:
function %i128_bricmp_eq(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp eq v0, v1, block1
v2 = icmp eq v0, v1
brnz v2, block1
jump block1
block1:
@@ -209,9 +210,8 @@ block1:
}
; block0:
; eq a3,[a0,a1],[a2,a3]##ty=i128
; andi a3,a3,255
; bne a3,zero,taken(label1),not_taken(label2)
; eq a2,[a0,a1],[a2,a3]##ty=i128
; bne a2,zero,taken(label1),not_taken(label2)
; block1:
; j label3
; block2:
@@ -221,7 +221,8 @@ block1:
function %i128_bricmp_ne(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp ne v0, v1, block1
v2 = icmp ne v0, v1
brnz v2, block1
jump block1
block1:
@@ -229,9 +230,8 @@ block1:
}
; block0:
; ne a3,[a0,a1],[a2,a3]##ty=i128
; andi a3,a3,255
; bne a3,zero,taken(label1),not_taken(label2)
; ne a2,[a0,a1],[a2,a3]##ty=i128
; bne a2,zero,taken(label1),not_taken(label2)
; block1:
; j label3
; block2:
@@ -241,7 +241,8 @@ block1:
function %i128_bricmp_slt(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp slt v0, v1, block1
v2 = icmp slt v0, v1
brnz v2, block1
jump block1
block1:
@@ -249,9 +250,8 @@ block1:
}
; block0:
; slt a3,[a0,a1],[a2,a3]##ty=i128
; andi a3,a3,255
; bne a3,zero,taken(label1),not_taken(label2)
; slt a2,[a0,a1],[a2,a3]##ty=i128
; bne a2,zero,taken(label1),not_taken(label2)
; block1:
; j label3
; block2:
@@ -261,7 +261,8 @@ block1:
function %i128_bricmp_ult(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp ult v0, v1, block1
v2 = icmp ult v0, v1
brnz v2, block1
jump block1
block1:
@@ -269,9 +270,8 @@ block1:
}
; block0:
; ult a3,[a0,a1],[a2,a3]##ty=i128
; andi a3,a3,255
; bne a3,zero,taken(label1),not_taken(label2)
; ult a2,[a0,a1],[a2,a3]##ty=i128
; bne a2,zero,taken(label1),not_taken(label2)
; block1:
; j label3
; block2:
@@ -281,7 +281,8 @@ block1:
function %i128_bricmp_sle(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp sle v0, v1, block1
v2 = icmp sle v0, v1
brnz v2, block1
jump block1
block1:
@@ -289,9 +290,8 @@ block1:
}
; block0:
; sle a3,[a0,a1],[a2,a3]##ty=i128
; andi a3,a3,255
; bne a3,zero,taken(label1),not_taken(label2)
; sle a2,[a0,a1],[a2,a3]##ty=i128
; bne a2,zero,taken(label1),not_taken(label2)
; block1:
; j label3
; block2:
@@ -301,7 +301,8 @@ block1:
function %i128_bricmp_ule(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp ule v0, v1, block1
v2 = icmp ule v0, v1
brnz v2, block1
jump block1
block1:
@@ -309,9 +310,8 @@ block1:
}
; block0:
; ule a3,[a0,a1],[a2,a3]##ty=i128
; andi a3,a3,255
; bne a3,zero,taken(label1),not_taken(label2)
; ule a2,[a0,a1],[a2,a3]##ty=i128
; bne a2,zero,taken(label1),not_taken(label2)
; block1:
; j label3
; block2:
@@ -321,7 +321,8 @@ block1:
function %i128_bricmp_sgt(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp sgt v0, v1, block1
v2 = icmp sgt v0, v1
brnz v2, block1
jump block1
block1:
@@ -329,9 +330,8 @@ block1:
}
; block0:
; sgt a3,[a0,a1],[a2,a3]##ty=i128
; andi a3,a3,255
; bne a3,zero,taken(label1),not_taken(label2)
; sgt a2,[a0,a1],[a2,a3]##ty=i128
; bne a2,zero,taken(label1),not_taken(label2)
; block1:
; j label3
; block2:
@@ -341,7 +341,8 @@ block1:
function %i128_bricmp_ugt(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp ugt v0, v1, block1
v2 = icmp ugt v0, v1
brnz v2, block1
jump block1
block1:
@@ -349,9 +350,8 @@ block1:
}
; block0:
; ugt a3,[a0,a1],[a2,a3]##ty=i128
; andi a3,a3,255
; bne a3,zero,taken(label1),not_taken(label2)
; ugt a2,[a0,a1],[a2,a3]##ty=i128
; bne a2,zero,taken(label1),not_taken(label2)
; block1:
; j label3
; block2:
@@ -361,7 +361,8 @@ block1:
function %i128_bricmp_sge(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp sge v0, v1, block1
v2 = icmp sge v0, v1
brnz v2, block1
jump block1
block1:
@@ -369,9 +370,8 @@ block1:
}
; block0:
; sge a3,[a0,a1],[a2,a3]##ty=i128
; andi a3,a3,255
; bne a3,zero,taken(label1),not_taken(label2)
; sge a2,[a0,a1],[a2,a3]##ty=i128
; bne a2,zero,taken(label1),not_taken(label2)
; block1:
; j label3
; block2:
@@ -381,7 +381,8 @@ block1:
function %i128_bricmp_uge(i128, i128) {
block0(v0: i128, v1: i128):
br_icmp uge v0, v1, block1
v2 = icmp uge v0, v1
brnz v2, block1
jump block1
block1:
@@ -389,9 +390,8 @@ block1:
}
; block0:
; uge a3,[a0,a1],[a2,a3]##ty=i128
; andi a3,a3,255
; bne a3,zero,taken(label1),not_taken(label2)
; uge a2,[a0,a1],[a2,a3]##ty=i128
; bne a2,zero,taken(label1),not_taken(label2)
; block1:
; j label3
; block2:

View File

@@ -5,25 +5,21 @@ target riscv64
function %f(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i64 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select.i64 v4, v1, v2
return v5
}
; block0:
; li a3,42
; uext.b a5,a0
; uext.b a7,a3
; eq t4,a5,a7##ty=i8
; selectif a0,a1,a2##test=t4
; select_reg a0,a1,a2##condition=(a0 eq a3)
; ret
function %g(i8) -> i8 {
block0(v0: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = trueif eq v4
return v5
v4 = icmp eq v0, v3
return v4
}
; block0:
@@ -68,12 +64,8 @@ block0(v0: i32, v1: i8, v2: i8):
}
; block0:
; li a4,42
; uext.w a6,a0
; uext.w t3,a4
; eq t0,a6,t3##ty=i32
; andi a6,t0,255
; select_i8 a0,a1,a2##condition=a6
; li a3,42
; select_reg a0,a1,a2##condition=(a0 eq a3)
; ret
function %i128_select(i8, i128, i128) -> i128 {

View File

@@ -13,17 +13,16 @@ block0(v0: i64, v1: i32):
}
; block0:
; uext.w t4,a1
; ld t0,0(a0)
; addi t0,t0,0
; ugt t1,t4,t0##ty=i64
; andi t1,t1,255
; beq t1,zero,taken(label1),not_taken(label2)
; uext.w t3,a1
; ld t4,0(a0)
; addi t4,t4,0
; ule t0,t3,t4##ty=i64
; bne t0,zero,taken(label1),not_taken(label2)
; block1:
; add t1,a0,t4
; ugt t4,t4,t0##ty=i64
; li t2,0
; selectif_spectre_guard a0,t2,t1##test=t4
; add t0,a0,t3
; ugt t3,t3,t4##ty=i64
; li t1,0
; selectif_spectre_guard a0,t1,t0##test=t3
; ret
; block2:
; udf##trap_code=heap_oob
@@ -38,17 +37,16 @@ block0(v0: i64, v1: i32):
}
; block0:
; uext.w t4,a1
; lui t3,16
; ugt t0,t4,t3##ty=i64
; andi t0,t0,255
; beq t0,zero,taken(label1),not_taken(label2)
; uext.w t3,a1
; lui a7,16
; ule t4,t3,a7##ty=i64
; bne t4,zero,taken(label1),not_taken(label2)
; block1:
; add t0,a0,t4
; lui t3,16
; ugt t1,t4,t3##ty=i64
; li t2,0
; selectif_spectre_guard a0,t2,t0##test=t1
; add t4,a0,t3
; lui a7,16
; ugt t0,t3,a7##ty=i64
; li t1,0
; selectif_spectre_guard a0,t1,t4##test=t0
; ret
; block2:
; udf##trap_code=heap_oob

View File

@@ -65,8 +65,8 @@ block2:
function %f2(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
v2 = ifcmp v0, v1
brif eq v2, block1
v2 = icmp eq v0, v1
brnz v2, block1
jump block2
block1:
@@ -96,8 +96,8 @@ block2:
function %f3(f32, f32) -> i32 {
block0(v0: f32, v1: f32):
v2 = ffcmp v0, v1
brff eq v2, block1
v2 = fcmp eq v0, v1
brnz v2, block1
jump block2
block1:
@@ -282,3 +282,49 @@ block2:
; popq %rbp
; ret
function %fflags(f32) {
block200(v0: f32):
v1 = f32const 0x34.0p0
v2 = fcmp eq v0, v1
brnz v2, block201
jump block400
block400:
v3 = fcmp ord v0, v1
brnz v3, block202
jump block201
block401:
return
block201:
return
block202:
trap heap_oob
}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; movl $1112539136, %r8d
; movd %r8d, %xmm5
; ucomiss %xmm5, %xmm0
; jp label2
; jnz label2; j label1
; block1:
; jmp label5
; block2:
; movl $1112539136, %esi
; movd %esi, %xmm9
; ucomiss %xmm9, %xmm0
; jnp label3; j label4
; block3:
; ud2 heap_oob
; block4:
; jmp label5
; block5:
; movq %rbp, %rsp
; popq %rbp
; ret

View File

@@ -3,49 +3,19 @@ test verifier
function %iflags(i32) {
block200(v0: i32):
v1 = ifcmp_imm v0, 17
brif eq v1, block201
v17 = iconst.i32 17
v1 = icmp eq v0, v17
brnz v1, block201
jump block400
block400:
brif ugt v1, block202
v5 = icmp ugt v0, v17
brnz v5, block202
jump block401
block401:
v2 = iconst.i32 34
v3 = ifcmp v0, v2
v4 = trueif eq v3
brnz v4, block202
jump block402
block402:
return
block201:
return
block202:
trap heap_oob
}
; check: v1 = ifcmp_imm v0, 17
; check: brif eq v1, block201
; check: brif ugt v1, block202
; check: v3 = ifcmp.i32 v0, v2
; check: v4 = trueif eq v3
function %fflags(f32) {
block200(v0: f32):
v1 = f32const 0x34.0p0
v2 = ffcmp v0, v1
brff eq v2, block201
jump block400
block400:
brff ord v2, block202
jump block401
block401:
v3 = trueff gt v2
v3 = icmp eq v0, v2
brnz v3, block202
jump block402
@@ -58,7 +28,41 @@ block201:
block202:
trap heap_oob
}
; check: v2 = ffcmp v0, v1
; check: brff eq v2, block201
; check: brff ord v2, block202
; check: v3 = trueff gt v2
; check: v17 = iconst.i32 17
; check: v1 = icmp eq v0, v17
; check: brnz v1, block201
; check: v5 = icmp.i32 ugt v0, v17
; check: brnz v5, block202
; check: v3 = icmp.i32 eq v0, v2
function %fflags(f32) {
block200(v0: f32):
v1 = f32const 0x34.0p0
v2 = fcmp eq v0, v1
brnz v2, block201
jump block400
block400:
v5 = fcmp ord v0, v1
brnz v5, block202
jump block401
block401:
v3 = fcmp gt v0, v1
brnz v3, block202
jump block402
block402:
return
block201:
return
block202:
trap heap_oob
}
; check: v2 = fcmp eq v0, v1
; check: brnz v2, block201
; check: v5 = fcmp.f32 ord v0, v1
; check: brnz v5, block202
; check: v3 = fcmp.f32 gt v0, v1

View File

@@ -53,13 +53,15 @@ block0(v90: i32, v91: i32, v92: i8):
; nextln: }
; Polymorphic instruction controlled by third operand.
function %selectif() system_v {
function %select() system_v {
block0(v95: i32, v96: i32, v97: i8):
v98 = selectif.i32 eq v97, v95, v96
v99 = icmp eq v97, v95
v98 = select v99, v95, v96
}
; sameln: function %selectif() system_v {
; sameln: function %select() system_v {
; nextln: block0(v95: i32, v96: i32, v97: i8):
; nextln: v98 = selectif.i32 eq v97, v95, v96
; nextln: v99 = icmp eq v97, v95
; nextln: v98 = select v99, v95, v96
; nextln: }
; Lane indexes.
@@ -83,7 +85,8 @@ block0(v90: i32, v91: i32):
v1 = icmp ult v90, v91
v2 = icmp_imm sge v90, -12
v3 = irsub_imm v91, 45
br_icmp eq v90, v91, block0(v91, v90)
v4 = icmp eq v90, v91
brnz v4, block0(v91, v90)
}
; sameln: function %icmp(i32, i32) fast {
; nextln: block0(v90: i32, v91: i32):
@@ -91,7 +94,8 @@ block0(v90: i32, v91: i32):
; nextln: v1 = icmp ult v90, v91
; nextln: v2 = icmp_imm sge v90, -12
; nextln: v3 = irsub_imm v91, 45
; nextln: br_icmp eq v90, v91, block0(v91, v90)
; nextln: v4 = icmp eq v90, v91
; nextln: brnz v4, block0(v91, v90)
; nextln: }
; Floating condition codes.

View File

@@ -1,767 +0,0 @@
test interpret
test run
target aarch64
target s390x
target x86_64
target riscv64
function %bricmp_eq_i64(i64, i64) -> i8 {
block0(v0: i64, v1: i64):
br_icmp.i64 eq v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_eq_i64(0, 0) == 1
; run: %bricmp_eq_i64(0, 1) == 0
; run: %bricmp_eq_i64(1, 0) == 0
; run: %bricmp_eq_i64(0xC0FFEEEE_DECAFFFF, 0xDECAFFFF_C0FFEEEE) == 0
function %bricmp_eq_i32(i32, i32) -> i8 {
block0(v0: i32, v1: i32):
br_icmp.i32 eq v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_eq_i32(0, 0) == 1
; run: %bricmp_eq_i32(0, 1) == 0
; run: %bricmp_eq_i32(1, 0) == 0
; run: %bricmp_eq_i32(0xC0FFEEEE, 0xDECAFFFF) == 0
function %bricmp_eq_i16(i16, i16) -> i8 {
block0(v0: i16, v1: i16):
br_icmp.i16 eq v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_eq_i16(0, 0) == 1
; run: %bricmp_eq_i16(0, 1) == 0
; run: %bricmp_eq_i16(1, 0) == 0
; run: %bricmp_eq_i16(0xC0FF, 0xDECA) == 0
function %bricmp_eq_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
br_icmp.i8 eq v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_eq_i8(0, 0) == 1
; run: %bricmp_eq_i8(0, 1) == 0
; run: %bricmp_eq_i8(1, 0) == 0
; run: %bricmp_eq_i8(0xC0, 0xDE) == 0
function %bricmp_ne_i64(i64, i64) -> i8 {
block0(v0: i64, v1: i64):
br_icmp.i64 ne v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ne_i64(0, 0) == 0
; run: %bricmp_ne_i64(0, 1) == 1
; run: %bricmp_ne_i64(1, 0) == 1
; run: %bricmp_ne_i64(0xC0FFEEEE_DECAFFFF, 0xDECAFFFF_C0FFEEEE) == 1
function %bricmp_ne_i32(i32, i32) -> i8 {
block0(v0: i32, v1: i32):
br_icmp.i32 ne v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ne_i32(0, 0) == 0
; run: %bricmp_ne_i32(0, 1) == 1
; run: %bricmp_ne_i32(1, 0) == 1
; run: %bricmp_ne_i32(0xC0FFEEEE, 0xDECAFFFF) == 1
function %bricmp_ne_i16(i16, i16) -> i8 {
block0(v0: i16, v1: i16):
br_icmp.i16 ne v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ne_i16(0, 0) == 0
; run: %bricmp_ne_i16(0, 1) == 1
; run: %bricmp_ne_i16(1, 0) == 1
; run: %bricmp_ne_i16(0xC0FF, 0xDECA) == 1
function %bricmp_ne_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
br_icmp.i8 ne v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ne_i8(0, 0) == 0
; run: %bricmp_ne_i8(0, 1) == 1
; run: %bricmp_ne_i8(1, 0) == 1
; run: %bricmp_ne_i8(0xC0, 0xDE) == 1
function %bricmp_slt_i64(i64, i64) -> i8 {
block0(v0: i64, v1: i64):
br_icmp.i64 slt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_slt_i64(0, 0) == 0
; run: %bricmp_slt_i64(0, 1) == 1
; run: %bricmp_slt_i64(1, 0) == 0
; run: %bricmp_slt_i64(0, -1) == 0
; run: %bricmp_slt_i64(-1, 0) == 1
function %bricmp_slt_i32(i32, i32) -> i8 {
block0(v0: i32, v1: i32):
br_icmp.i32 slt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_slt_i32(0, 0) == 0
; run: %bricmp_slt_i32(0, 1) == 1
; run: %bricmp_slt_i32(1, 0) == 0
; run: %bricmp_slt_i32(0, -1) == 0
; run: %bricmp_slt_i32(-1, 0) == 1
function %bricmp_slt_i16(i16, i16) -> i8 {
block0(v0: i16, v1: i16):
br_icmp.i16 slt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_slt_i16(0, 0) == 0
; run: %bricmp_slt_i16(0, 1) == 1
; run: %bricmp_slt_i16(1, 0) == 0
; run: %bricmp_slt_i16(0, -1) == 0
; run: %bricmp_slt_i16(-1, 0) == 1
function %bricmp_slt_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
br_icmp.i8 slt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_slt_i8(0, 0) == 0
; run: %bricmp_slt_i8(0, 1) == 1
; run: %bricmp_slt_i8(1, 0) == 0
; run: %bricmp_slt_i8(0, -1) == 0
; run: %bricmp_slt_i8(-1, 0) == 1
function %bricmp_ult_i64(i64, i64) -> i8 {
block0(v0: i64, v1: i64):
br_icmp.i64 ult v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ult_i64(0, 0) == 0
; run: %bricmp_ult_i64(0, 1) == 1
; run: %bricmp_ult_i64(1, 0) == 0
; run: %bricmp_ult_i64(0, -1) == 1
; run: %bricmp_ult_i64(-1, 0) == 0
function %bricmp_ult_i32(i32, i32) -> i8 {
block0(v0: i32, v1: i32):
br_icmp.i32 ult v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ult_i32(0, 0) == 0
; run: %bricmp_ult_i32(0, 1) == 1
; run: %bricmp_ult_i32(1, 0) == 0
; run: %bricmp_ult_i32(0, -1) == 1
; run: %bricmp_ult_i32(-1, 0) == 0
function %bricmp_ult_i16(i16, i16) -> i8 {
block0(v0: i16, v1: i16):
br_icmp.i16 ult v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ult_i16(0, 0) == 0
; run: %bricmp_ult_i16(0, 1) == 1
; run: %bricmp_ult_i16(1, 0) == 0
; run: %bricmp_ult_i16(0, -1) == 1
; run: %bricmp_ult_i16(-1, 0) == 0
function %bricmp_ult_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
br_icmp.i8 ult v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ult_i8(0, 0) == 0
; run: %bricmp_ult_i8(0, 1) == 1
; run: %bricmp_ult_i8(1, 0) == 0
; run: %bricmp_ult_i8(0, -1) == 1
; run: %bricmp_ult_i8(-1, 0) == 0
function %bricmp_sle_i64(i64, i64) -> i8 {
block0(v0: i64, v1: i64):
br_icmp.i64 sle v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_sle_i64(0, 0) == 1
; run: %bricmp_sle_i64(0, 1) == 1
; run: %bricmp_sle_i64(1, 0) == 0
; run: %bricmp_sle_i64(0, -1) == 0
; run: %bricmp_sle_i64(-1, 0) == 1
function %bricmp_sle_i32(i32, i32) -> i8 {
block0(v0: i32, v1: i32):
br_icmp.i32 sle v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_sle_i32(0, 0) == 1
; run: %bricmp_sle_i32(0, 1) == 1
; run: %bricmp_sle_i32(1, 0) == 0
; run: %bricmp_sle_i32(0, -1) == 0
; run: %bricmp_sle_i32(-1, 0) == 1
function %bricmp_sle_i16(i16, i16) -> i8 {
block0(v0: i16, v1: i16):
br_icmp.i16 sle v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_sle_i16(0, 0) == 1
; run: %bricmp_sle_i16(0, 1) == 1
; run: %bricmp_sle_i16(1, 0) == 0
; run: %bricmp_sle_i16(0, -1) == 0
; run: %bricmp_sle_i16(-1, 0) == 1
function %bricmp_sle_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
br_icmp.i8 sle v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_sle_i8(0, 0) == 1
; run: %bricmp_sle_i8(0, 1) == 1
; run: %bricmp_sle_i8(1, 0) == 0
; run: %bricmp_sle_i8(0, -1) == 0
; run: %bricmp_sle_i8(-1, 0) == 1
function %bricmp_ule_i64(i64, i64) -> i8 {
block0(v0: i64, v1: i64):
br_icmp.i64 ule v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ule_i64(0, 0) == 1
; run: %bricmp_ule_i64(0, 1) == 1
; run: %bricmp_ule_i64(1, 0) == 0
; run: %bricmp_ule_i64(0, -1) == 1
; run: %bricmp_ule_i64(-1, 0) == 0
function %bricmp_ule_i32(i32, i32) -> i8 {
block0(v0: i32, v1: i32):
br_icmp.i32 ule v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ule_i32(0, 0) == 1
; run: %bricmp_ule_i32(0, 1) == 1
; run: %bricmp_ule_i32(1, 0) == 0
; run: %bricmp_ule_i32(0, -1) == 1
; run: %bricmp_ule_i32(-1, 0) == 0
function %bricmp_ule_i16(i16, i16) -> i8 {
block0(v0: i16, v1: i16):
br_icmp.i16 ule v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ule_i16(0, 0) == 1
; run: %bricmp_ule_i16(0, 1) == 1
; run: %bricmp_ule_i16(1, 0) == 0
; run: %bricmp_ule_i16(0, -1) == 1
; run: %bricmp_ule_i16(-1, 0) == 0
function %bricmp_ule_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
br_icmp.i8 ule v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ule_i8(0, 0) == 1
; run: %bricmp_ule_i8(0, 1) == 1
; run: %bricmp_ule_i8(1, 0) == 0
; run: %bricmp_ule_i8(0, -1) == 1
; run: %bricmp_ule_i8(-1, 0) == 0
function %bricmp_sgt_i64(i64, i64) -> i8 {
block0(v0: i64, v1: i64):
br_icmp.i64 sgt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_sgt_i64(0, 0) == 0
; run: %bricmp_sgt_i64(0, 1) == 0
; run: %bricmp_sgt_i64(1, 0) == 1
; run: %bricmp_sgt_i64(0, -1) == 1
; run: %bricmp_sgt_i64(-1, 0) == 0
function %bricmp_sgt_i32(i32, i32) -> i8 {
block0(v0: i32, v1: i32):
br_icmp.i32 sgt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_sgt_i32(0, 0) == 0
; run: %bricmp_sgt_i32(0, 1) == 0
; run: %bricmp_sgt_i32(1, 0) == 1
; run: %bricmp_sgt_i32(0, -1) == 1
; run: %bricmp_sgt_i32(-1, 0) == 0
function %bricmp_sgt_i16(i16, i16) -> i8 {
block0(v0: i16, v1: i16):
br_icmp.i16 sgt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_sgt_i16(0, 0) == 0
; run: %bricmp_sgt_i16(0, 1) == 0
; run: %bricmp_sgt_i16(1, 0) == 1
; run: %bricmp_sgt_i16(0, -1) == 1
; run: %bricmp_sgt_i16(-1, 0) == 0
function %bricmp_sgt_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
br_icmp.i8 sgt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_sgt_i8(0, 0) == 0
; run: %bricmp_sgt_i8(0, 1) == 0
; run: %bricmp_sgt_i8(1, 0) == 1
; run: %bricmp_sgt_i8(0, -1) == 1
; run: %bricmp_sgt_i8(-1, 0) == 0
function %bricmp_ugt_i64(i64, i64) -> i8 {
block0(v0: i64, v1: i64):
br_icmp.i64 ugt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ugt_i64(0, 0) == 0
; run: %bricmp_ugt_i64(0, 1) == 0
; run: %bricmp_ugt_i64(1, 0) == 1
; run: %bricmp_ugt_i64(0, -1) == 0
; run: %bricmp_ugt_i64(-1, 0) == 1
function %bricmp_ugt_i32(i32, i32) -> i8 {
block0(v0: i32, v1: i32):
br_icmp.i32 ugt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ugt_i32(0, 0) == 0
; run: %bricmp_ugt_i32(0, 1) == 0
; run: %bricmp_ugt_i32(1, 0) == 1
; run: %bricmp_ugt_i32(0, -1) == 0
; run: %bricmp_ugt_i32(-1, 0) == 1
function %bricmp_ugt_i16(i16, i16) -> i8 {
block0(v0: i16, v1: i16):
br_icmp.i16 ugt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ugt_i16(0, 0) == 0
; run: %bricmp_ugt_i16(0, 1) == 0
; run: %bricmp_ugt_i16(1, 0) == 1
; run: %bricmp_ugt_i16(0, -1) == 0
; run: %bricmp_ugt_i16(-1, 0) == 1
function %bricmp_ugt_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
br_icmp.i8 ugt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_ugt_i8(0, 0) == 0
; run: %bricmp_ugt_i8(0, 1) == 0
; run: %bricmp_ugt_i8(1, 0) == 1
; run: %bricmp_ugt_i8(0, -1) == 0
; run: %bricmp_ugt_i8(-1, 0) == 1
function %bricmp_sge_i64(i64, i64) -> i8 {
block0(v0: i64, v1: i64):
br_icmp.i64 sge v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_sge_i64(0, 0) == 1
; run: %bricmp_sge_i64(0, 1) == 0
; run: %bricmp_sge_i64(1, 0) == 1
; run: %bricmp_sge_i64(0, -1) == 1
; run: %bricmp_sge_i64(-1, 0) == 0
function %bricmp_sge_i32(i32, i32) -> i8 {
block0(v0: i32, v1: i32):
br_icmp.i32 sge v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_sge_i32(0, 0) == 1
; run: %bricmp_sge_i32(0, 1) == 0
; run: %bricmp_sge_i32(1, 0) == 1
; run: %bricmp_sge_i32(0, -1) == 1
; run: %bricmp_sge_i32(-1, 0) == 0
function %bricmp_sge_i16(i16, i16) -> i8 {
block0(v0: i16, v1: i16):
br_icmp.i16 sge v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_sge_i16(0, 0) == 1
; run: %bricmp_sge_i16(0, 1) == 0
; run: %bricmp_sge_i16(1, 0) == 1
; run: %bricmp_sge_i16(0, -1) == 1
; run: %bricmp_sge_i16(-1, 0) == 0
function %bricmp_sge_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
br_icmp.i8 sge v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_sge_i8(0, 0) == 1
; run: %bricmp_sge_i8(0, 1) == 0
; run: %bricmp_sge_i8(1, 0) == 1
; run: %bricmp_sge_i8(0, -1) == 1
; run: %bricmp_sge_i8(-1, 0) == 0
function %bricmp_uge_i64(i64, i64) -> i8 {
block0(v0: i64, v1: i64):
br_icmp.i64 uge v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_uge_i64(0, 0) == 1
; run: %bricmp_uge_i64(0, 1) == 0
; run: %bricmp_uge_i64(1, 0) == 1
; run: %bricmp_uge_i64(0, -1) == 0
; run: %bricmp_uge_i64(-1, 0) == 1
function %bricmp_uge_i32(i32, i32) -> i8 {
block0(v0: i32, v1: i32):
br_icmp.i32 uge v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_uge_i32(0, 0) == 1
; run: %bricmp_uge_i32(0, 1) == 0
; run: %bricmp_uge_i32(1, 0) == 1
; run: %bricmp_uge_i32(0, -1) == 0
; run: %bricmp_uge_i32(-1, 0) == 1
function %bricmp_uge_i16(i16, i16) -> i8 {
block0(v0: i16, v1: i16):
br_icmp.i16 uge v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_uge_i16(0, 0) == 1
; run: %bricmp_uge_i16(0, 1) == 0
; run: %bricmp_uge_i16(1, 0) == 1
; run: %bricmp_uge_i16(0, -1) == 0
; run: %bricmp_uge_i16(-1, 0) == 1
function %bricmp_uge_i8(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
br_icmp.i8 uge v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %bricmp_uge_i8(0, 0) == 1
; run: %bricmp_uge_i8(0, 1) == 0
; run: %bricmp_uge_i8(1, 0) == 1
; run: %bricmp_uge_i8(0, -1) == 0
; run: %bricmp_uge_i8(-1, 0) == 1

View File

@@ -1,235 +0,0 @@
test run
target aarch64
target riscv64
target s390x
function %i128_bricmp_eq(i128, i128) -> i8 {
block0(v0: i128, v1: i128):
br_icmp.i128 eq v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %i128_bricmp_eq(0, 0) == 1
; run: %i128_bricmp_eq(-1, -1) == 1
; run: %i128_bricmp_eq(-1, 0) == 0
; run: %i128_bricmp_eq(-1, 0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 0
; run: %i128_bricmp_eq(0x00000000_00000000_FFFFFFFF_FFFFFFFF, -1) == 0
; run: %i128_bricmp_eq(0xFFFFFFFF_FFFFFFFF_00000000_00000000, -1) == 0
; run: %i128_bricmp_eq(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF, 0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == 1
; run: %i128_bricmp_eq(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x00000000_00000001_00000000_00000001) == 0
; run: %i128_bricmp_eq(0x00000000_00000001_FFFFFFFF_FFFFFFFF, 0x00000000_00000001_00000000_00000001) == 0
function %i128_bricmp_ne(i128, i128) -> i8 {
block0(v0: i128,v1: i128):
br_icmp.i128 ne v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %i128_bricmp_ne(0, 0) == 0
; run: %i128_bricmp_ne(-1, -1) == 0
; run: %i128_bricmp_ne(-1, 0) == 1
; run: %i128_bricmp_ne(-1, 0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 1
; run: %i128_bricmp_ne(0x00000000_00000000_FFFFFFFF_FFFFFFFF, -1) == 1
; run: %i128_bricmp_ne(0xFFFFFFFF_FFFFFFFF_00000000_00000000, -1) == 1
; run: %i128_bricmp_ne(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF, 0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == 0
; run: %i128_bricmp_ne(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF, 0x00000000_00000001_00000000_00000001) == 1
; run: %i128_bricmp_ne(0x00000000_00000001_FFFFFFFF_FFFFFFFF, 0x00000000_00000001_00000000_00000001) == 1
function %i128_bricmp_slt(i128, i128) -> i8 {
block0(v0: i128,v1: i128):
br_icmp.i128 slt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %i128_bricmp_slt(0, 0) == 0
; run: %i128_bricmp_slt(1, 1) == 0
; run: %i128_bricmp_slt(0, 1) == 1
; run: %i128_bricmp_slt(-1, 0) == 1
; run: %i128_bricmp_slt(0, -1) == 0
; run: %i128_bricmp_slt(-1, -1) == 0
; run: %i128_bricmp_slt(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFD, 0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == 1
; run: %i128_bricmp_slt(0xC0FFEEEE_C0FFEEEE_00000000_00000000, 0xDECAFFFF_DECAFFFF_00000000_00000000) == 1
; run: %i128_bricmp_slt(0xDECAFFFF_DECAFFFF_00000000_00000000, 0xC0FFEEEE_C0FFEEEE_00000000_00000000) == 0
function %i128_bricmp_ult(i128, i128) -> i8 {
block0(v0: i128,v1: i128):
br_icmp.i128 ult v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %i128_bricmp_ult(0, 0) == 0
; run: %i128_bricmp_ult(1, 1) == 0
; run: %i128_bricmp_ult(0, 1) == 1
; run: %i128_bricmp_ult(-1, 0) == 0
; run: %i128_bricmp_ult(0, -1) == 1
; run: %i128_bricmp_ult(-1, -1) == 0
; run: %i128_bricmp_ult(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFD, 0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == 1
; run: %i128_bricmp_ult(0xC0FFEEEE_C0FFEEEE_00000000_00000000, 0xDECAFFFF_DECAFFFF_00000000_00000000) == 1
; run: %i128_bricmp_ult(0xDECAFFFF_DECAFFFF_00000000_00000000, 0xC0FFEEEE_C0FFEEEE_00000000_00000000) == 0
function %i128_bricmp_sle(i128, i128) -> i8 {
block0(v0: i128,v1: i128):
br_icmp.i128 sle v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %i128_bricmp_sle(0, 0) == 1
; run: %i128_bricmp_sle(1, 1) == 1
; run: %i128_bricmp_sle(0, 1) == 1
; run: %i128_bricmp_sle(-1, 0) == 1
; run: %i128_bricmp_sle(0, -1) == 0
; run: %i128_bricmp_sle(-1, -1) == 1
; run: %i128_bricmp_sle(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFD, 0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == 1
; run: %i128_bricmp_sle(0xC0FFEEEE_C0FFEEEE_00000000_00000000, 0xDECAFFFF_DECAFFFF_00000000_00000000) == 1
; run: %i128_bricmp_sle(0xDECAFFFF_DECAFFFF_00000000_00000000, 0xC0FFEEEE_C0FFEEEE_00000000_00000000) == 0
function %i128_bricmp_ule(i128, i128) -> i8 {
block0(v0: i128,v1: i128):
br_icmp.i128 ule v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %i128_bricmp_ule(0, 0) == 1
; run: %i128_bricmp_ule(1, 1) == 1
; run: %i128_bricmp_ule(0, 1) == 1
; run: %i128_bricmp_ule(-1, 0) == 0
; run: %i128_bricmp_ule(0, -1) == 1
; run: %i128_bricmp_ule(-1, -1) == 1
; run: %i128_bricmp_ule(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFD, 0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == 1
; run: %i128_bricmp_ule(0xC0FFEEEE_C0FFEEEE_00000000_00000000, 0xDECAFFFF_DECAFFFF_00000000_00000000) == 1
; run: %i128_bricmp_ule(0xDECAFFFF_DECAFFFF_00000000_00000000, 0xC0FFEEEE_C0FFEEEE_00000000_00000000) == 0
function %i128_bricmp_sgt(i128, i128) -> i8 {
block0(v0: i128,v1: i128):
br_icmp.i128 sgt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %i128_bricmp_sgt(0, 0) == 0
; run: %i128_bricmp_sgt(1, 1) == 0
; run: %i128_bricmp_sgt(0, 1) == 0
; run: %i128_bricmp_sgt(-1, 0) == 0
; run: %i128_bricmp_sgt(0, -1) == 1
; run: %i128_bricmp_sgt(-1, -1) == 0
; run: %i128_bricmp_sgt(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFD, 0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == 0
; run: %i128_bricmp_sgt(0xC0FFEEEE_C0FFEEEE_00000000_00000000, 0xDECAFFFF_DECAFFFF_00000000_00000000) == 0
; run: %i128_bricmp_sgt(0xDECAFFFF_DECAFFFF_00000000_00000000, 0xC0FFEEEE_C0FFEEEE_00000000_00000000) == 1
function %i128_bricmp_ugt(i128, i128) -> i8 {
block0(v0: i128,v1: i128):
br_icmp.i128 ugt v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %i128_bricmp_ugt(0, 0) == 0
; run: %i128_bricmp_ugt(1, 1) == 0
; run: %i128_bricmp_ugt(0, 1) == 0
; run: %i128_bricmp_ugt(-1, 0) == 1
; run: %i128_bricmp_ugt(0, -1) == 0
; run: %i128_bricmp_ugt(-1, -1) == 0
; run: %i128_bricmp_ugt(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFD, 0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == 0
; run: %i128_bricmp_ugt(0xC0FFEEEE_C0FFEEEE_00000000_00000000, 0xDECAFFFF_DECAFFFF_00000000_00000000) == 0
; run: %i128_bricmp_ugt(0xDECAFFFF_DECAFFFF_00000000_00000000, 0xC0FFEEEE_C0FFEEEE_00000000_00000000) == 1
function %i128_bricmp_sge(i128, i128) -> i8 {
block0(v0: i128,v1: i128):
br_icmp.i128 sge v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %i128_bricmp_sge(0, 0) == 1
; run: %i128_bricmp_sge(1, 1) == 1
; run: %i128_bricmp_sge(0, 1) == 0
; run: %i128_bricmp_sge(-1, 0) == 0
; run: %i128_bricmp_sge(0, -1) == 1
; run: %i128_bricmp_sge(-1, -1) == 1
; run: %i128_bricmp_sge(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFD, 0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == 0
; run: %i128_bricmp_sge(0xC0FFEEEE_C0FFEEEE_00000000_00000000, 0xDECAFFFF_DECAFFFF_00000000_00000000) == 0
; run: %i128_bricmp_sge(0xDECAFFFF_DECAFFFF_00000000_00000000, 0xC0FFEEEE_C0FFEEEE_00000000_00000000) == 1
function %i128_bricmp_uge(i128, i128) -> i8 {
block0(v0: i128,v1: i128):
br_icmp.i128 uge v0, v1, block2
jump block1
block1:
v2 = iconst.i8 0
return v2
block2:
v3 = iconst.i8 1
return v3
}
; run: %i128_bricmp_uge(0, 0) == 1
; run: %i128_bricmp_uge(1, 1) == 1
; run: %i128_bricmp_uge(0, 1) == 0
; run: %i128_bricmp_uge(-1, 0) == 1
; run: %i128_bricmp_uge(0, -1) == 0
; run: %i128_bricmp_uge(-1, -1) == 1
; run: %i128_bricmp_uge(0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFD, 0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFF) == 0
; run: %i128_bricmp_uge(0xC0FFEEEE_C0FFEEEE_00000000_00000000, 0xDECAFFFF_DECAFFFF_00000000_00000000) == 0
; run: %i128_bricmp_uge(0xDECAFFFF_DECAFFFF_00000000_00000000, 0xC0FFEEEE_C0FFEEEE_00000000_00000000) == 1

View File

@@ -1,316 +1,316 @@
;; the interpreter does not support `selectif_spectre_guard`.
;; the interpreter does not support `select_spectre_guard`.
test run
set enable_llvm_abi_extensions=true
target aarch64
target s390x
target x86_64
function %selectif_spectre_guard_i8_eq(i8, i8, i8) -> i8 {
function %select_spectre_guard_i8_eq(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i8 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i8 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i8_eq(0, 32, 255) == 255
; run: %selectif_spectre_guard_i8_eq(255, 32, -1) == -1
; run: %selectif_spectre_guard_i8_eq(42, 32, 255) == 32
; run: %select_spectre_guard_i8_eq(0, 32, 255) == 255
; run: %select_spectre_guard_i8_eq(255, 32, -1) == -1
; run: %select_spectre_guard_i8_eq(42, 32, 255) == 32
function %selectif_spectre_guard_i16_eq(i8, i16, i16) -> i16 {
function %select_spectre_guard_i16_eq(i8, i16, i16) -> i16 {
block0(v0: i8, v1: i16, v2: i16):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i16 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i16 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i16_eq(0, 32, 65535) == 65535
; run: %selectif_spectre_guard_i16_eq(255, 32, -1) == -1
; run: %selectif_spectre_guard_i16_eq(42, 32, 65535) == 32
; run: %select_spectre_guard_i16_eq(0, 32, 65535) == 65535
; run: %select_spectre_guard_i16_eq(255, 32, -1) == -1
; run: %select_spectre_guard_i16_eq(42, 32, 65535) == 32
function %selectif_spectre_guard_i32_eq(i8, i32, i32) -> i32 {
function %select_spectre_guard_i32_eq(i8, i32, i32) -> i32 {
block0(v0: i8, v1: i32, v2: i32):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i32 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i32 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i32_eq(0, 32, 4294967295) == 4294967295
; run: %selectif_spectre_guard_i32_eq(255, 32, -1) == -1
; run: %selectif_spectre_guard_i32_eq(42, 32, 4294967295) == 32
; run: %select_spectre_guard_i32_eq(0, 32, 4294967295) == 4294967295
; run: %select_spectre_guard_i32_eq(255, 32, -1) == -1
; run: %select_spectre_guard_i32_eq(42, 32, 4294967295) == 32
function %selectif_spectre_guard_i64_eq(i8, i64, i64) -> i64 {
function %select_spectre_guard_i64_eq(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i64 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i64 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i64_eq(0, 32, 18446744073709551615) == 18446744073709551615
; run: %selectif_spectre_guard_i64_eq(255, 32, -1) == -1
; run: %selectif_spectre_guard_i64_eq(42, 32, 18446744073709551615) == 32
; run: %select_spectre_guard_i64_eq(0, 32, 18446744073709551615) == 18446744073709551615
; run: %select_spectre_guard_i64_eq(255, 32, -1) == -1
; run: %select_spectre_guard_i64_eq(42, 32, 18446744073709551615) == 32
function %selectif_spectre_guard_i128_eq(i8, i128, i128) -> i128 {
function %select_spectre_guard_i128_eq(i8, i128, i128) -> i128 {
block0(v0: i8, v1: i128, v2: i128):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i128 eq v4, v1, v2
v4 = icmp eq v0, v3
v5 = select_spectre_guard.i128 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i128_eq(0, 32, 19000000000000000000) == 19000000000000000000
; run: %selectif_spectre_guard_i128_eq(255, 32, -1) == -1
; run: %selectif_spectre_guard_i128_eq(42, 32, 19000000000000000000) == 32
; run: %select_spectre_guard_i128_eq(0, 32, 19000000000000000000) == 19000000000000000000
; run: %select_spectre_guard_i128_eq(255, 32, -1) == -1
; run: %select_spectre_guard_i128_eq(42, 32, 19000000000000000000) == 32
function %selectif_spectre_guard_i8_ult(i8, i8, i8) -> i8 {
function %select_spectre_guard_i8_ult(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i8 ult v4, v1, v2
v4 = icmp ult v0, v3
v5 = select_spectre_guard.i8 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i8_ult(0, 32, 255) == 32
; run: %selectif_spectre_guard_i8_ult(255, 32, -1) == -1
; run: %selectif_spectre_guard_i8_ult(42, 32, 255) == 255
; run: %select_spectre_guard_i8_ult(0, 32, 255) == 32
; run: %select_spectre_guard_i8_ult(255, 32, -1) == -1
; run: %select_spectre_guard_i8_ult(42, 32, 255) == 255
function %selectif_spectre_guard_i16_ult(i8, i16, i16) -> i16 {
function %select_spectre_guard_i16_ult(i8, i16, i16) -> i16 {
block0(v0: i8, v1: i16, v2: i16):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i16 ult v4, v1, v2
v4 = icmp ult v0, v3
v5 = select_spectre_guard.i16 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i16_ult(0, 32, 65535) == 32
; run: %selectif_spectre_guard_i16_ult(255, 32, -1) == -1
; run: %selectif_spectre_guard_i16_ult(42, 32, 65535) == 65535
; run: %select_spectre_guard_i16_ult(0, 32, 65535) == 32
; run: %select_spectre_guard_i16_ult(255, 32, -1) == -1
; run: %select_spectre_guard_i16_ult(42, 32, 65535) == 65535
function %selectif_spectre_guard_i32_ult(i8, i32, i32) -> i32 {
function %select_spectre_guard_i32_ult(i8, i32, i32) -> i32 {
block0(v0: i8, v1: i32, v2: i32):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i32 ult v4, v1, v2
v4 = icmp ult v0, v3
v5 = select_spectre_guard.i32 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i32_ult(0, 32, 4294967295) == 32
; run: %selectif_spectre_guard_i32_ult(255, 32, -1) == -1
; run: %selectif_spectre_guard_i32_ult(42, 32, 4294967295) == 4294967295
; run: %select_spectre_guard_i32_ult(0, 32, 4294967295) == 32
; run: %select_spectre_guard_i32_ult(255, 32, -1) == -1
; run: %select_spectre_guard_i32_ult(42, 32, 4294967295) == 4294967295
function %selectif_spectre_guard_i64_ult(i8, i64, i64) -> i64 {
function %select_spectre_guard_i64_ult(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i64 ult v4, v1, v2
v4 = icmp ult v0, v3
v5 = select_spectre_guard.i64 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i64_ult(0, 32, 18446744073709551615) == 32
; run: %selectif_spectre_guard_i64_ult(255, 32, -1) == -1
; run: %selectif_spectre_guard_i64_ult(42, 32, 18446744073709551615) == 18446744073709551615
; run: %select_spectre_guard_i64_ult(0, 32, 18446744073709551615) == 32
; run: %select_spectre_guard_i64_ult(255, 32, -1) == -1
; run: %select_spectre_guard_i64_ult(42, 32, 18446744073709551615) == 18446744073709551615
function %selectif_spectre_guard_i128_ult(i8, i128, i128) -> i128 {
function %select_spectre_guard_i128_ult(i8, i128, i128) -> i128 {
block0(v0: i8, v1: i128, v2: i128):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i128 ult v4, v1, v2
v4 = icmp ult v0, v3
v5 = select_spectre_guard.i128 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i128_ult(0, 32, 19000000000000000000) == 32
; run: %selectif_spectre_guard_i128_ult(255, 32, -1) == -1
; run: %selectif_spectre_guard_i128_ult(42, 32, 19000000000000000000) == 19000000000000000000
; run: %select_spectre_guard_i128_ult(0, 32, 19000000000000000000) == 32
; run: %select_spectre_guard_i128_ult(255, 32, -1) == -1
; run: %select_spectre_guard_i128_ult(42, 32, 19000000000000000000) == 19000000000000000000
function %selectif_spectre_guard_i8_ule(i8, i8, i8) -> i8 {
function %select_spectre_guard_i8_ule(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i8 ule v4, v1, v2
v4 = icmp ule v0, v3
v5 = select_spectre_guard.i8 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i8_ule(0, 32, 255) == 32
; run: %selectif_spectre_guard_i8_ule(255, 32, -1) == -1
; run: %selectif_spectre_guard_i8_ule(42, 32, 255) == 32
; run: %select_spectre_guard_i8_ule(0, 32, 255) == 32
; run: %select_spectre_guard_i8_ule(255, 32, -1) == -1
; run: %select_spectre_guard_i8_ule(42, 32, 255) == 32
function %selectif_spectre_guard_i16_ule(i8, i16, i16) -> i16 {
function %select_spectre_guard_i16_ule(i8, i16, i16) -> i16 {
block0(v0: i8, v1: i16, v2: i16):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i16 ule v4, v1, v2
v4 = icmp ule v0, v3
v5 = select_spectre_guard.i16 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i16_ule(0, 32, 65535) == 32
; run: %selectif_spectre_guard_i16_ule(255, 32, -1) == -1
; run: %selectif_spectre_guard_i16_ule(42, 32, 65535) == 32
; run: %select_spectre_guard_i16_ule(0, 32, 65535) == 32
; run: %select_spectre_guard_i16_ule(255, 32, -1) == -1
; run: %select_spectre_guard_i16_ule(42, 32, 65535) == 32
function %selectif_spectre_guard_i32_ule(i8, i32, i32) -> i32 {
function %select_spectre_guard_i32_ule(i8, i32, i32) -> i32 {
block0(v0: i8, v1: i32, v2: i32):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i32 ule v4, v1, v2
v4 = icmp ule v0, v3
v5 = select_spectre_guard.i32 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i32_ule(0, 32, 4294967295) == 32
; run: %selectif_spectre_guard_i32_ule(255, 32, -1) == -1
; run: %selectif_spectre_guard_i32_ule(42, 32, 4294967295) == 32
; run: %select_spectre_guard_i32_ule(0, 32, 4294967295) == 32
; run: %select_spectre_guard_i32_ule(255, 32, -1) == -1
; run: %select_spectre_guard_i32_ule(42, 32, 4294967295) == 32
function %selectif_spectre_guard_i64_ule(i8, i64, i64) -> i64 {
function %select_spectre_guard_i64_ule(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i64 ule v4, v1, v2
v4 = icmp ule v0, v3
v5 = select_spectre_guard.i64 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i64_ule(0, 32, 18446744073709551615) == 32
; run: %selectif_spectre_guard_i64_ule(255, 32, -1) == -1
; run: %selectif_spectre_guard_i64_ule(42, 32, 18446744073709551615) == 32
; run: %select_spectre_guard_i64_ule(0, 32, 18446744073709551615) == 32
; run: %select_spectre_guard_i64_ule(255, 32, -1) == -1
; run: %select_spectre_guard_i64_ule(42, 32, 18446744073709551615) == 32
function %selectif_spectre_guard_i128_ule(i8, i128, i128) -> i128 {
function %select_spectre_guard_i128_ule(i8, i128, i128) -> i128 {
block0(v0: i8, v1: i128, v2: i128):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i128 ule v4, v1, v2
v4 = icmp ule v0, v3
v5 = select_spectre_guard.i128 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i128_ule(0, 32, 19000000000000000000) == 32
; run: %selectif_spectre_guard_i128_ule(255, 32, -1) == -1
; run: %selectif_spectre_guard_i128_ule(42, 32, 19000000000000000000) == 32
; run: %select_spectre_guard_i128_ule(0, 32, 19000000000000000000) == 32
; run: %select_spectre_guard_i128_ule(255, 32, -1) == -1
; run: %select_spectre_guard_i128_ule(42, 32, 19000000000000000000) == 32
function %selectif_spectre_guard_i8_slt(i8, i8, i8) -> i8 {
function %select_spectre_guard_i8_slt(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i8 slt v4, v1, v2
v4 = icmp slt v0, v3
v5 = select_spectre_guard.i8 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i8_slt(0, 32, 255) == 32
; run: %selectif_spectre_guard_i8_slt(-128, 32, -1) == 32
; run: %selectif_spectre_guard_i8_slt(42, 32, 255) == 255
; run: %select_spectre_guard_i8_slt(0, 32, 255) == 32
; run: %select_spectre_guard_i8_slt(-128, 32, -1) == 32
; run: %select_spectre_guard_i8_slt(42, 32, 255) == 255
function %selectif_spectre_guard_i16_slt(i8, i16, i16) -> i16 {
function %select_spectre_guard_i16_slt(i8, i16, i16) -> i16 {
block0(v0: i8, v1: i16, v2: i16):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i16 slt v4, v1, v2
v4 = icmp slt v0, v3
v5 = select_spectre_guard.i16 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i16_slt(0, 32, 65535) == 32
; run: %selectif_spectre_guard_i16_slt(-128, 32, -1) == 32
; run: %selectif_spectre_guard_i16_slt(42, 32, 65535) == 65535
; run: %select_spectre_guard_i16_slt(0, 32, 65535) == 32
; run: %select_spectre_guard_i16_slt(-128, 32, -1) == 32
; run: %select_spectre_guard_i16_slt(42, 32, 65535) == 65535
function %selectif_spectre_guard_i32_slt(i8, i32, i32) -> i32 {
function %select_spectre_guard_i32_slt(i8, i32, i32) -> i32 {
block0(v0: i8, v1: i32, v2: i32):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i32 slt v4, v1, v2
v4 = icmp slt v0, v3
v5 = select_spectre_guard.i32 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i32_slt(0, 32, 4294967295) == 32
; run: %selectif_spectre_guard_i32_slt(-128, 32, -1) == 32
; run: %selectif_spectre_guard_i32_slt(42, 32, 4294967295) == 4294967295
; run: %select_spectre_guard_i32_slt(0, 32, 4294967295) == 32
; run: %select_spectre_guard_i32_slt(-128, 32, -1) == 32
; run: %select_spectre_guard_i32_slt(42, 32, 4294967295) == 4294967295
function %selectif_spectre_guard_i64_slt(i8, i64, i64) -> i64 {
function %select_spectre_guard_i64_slt(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i64 slt v4, v1, v2
v4 = icmp slt v0, v3
v5 = select_spectre_guard.i64 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i64_slt(0, 32, 18446744073709551615) == 32
; run: %selectif_spectre_guard_i64_slt(-128, 32, -1) == 32
; run: %selectif_spectre_guard_i64_slt(42, 32, 18446744073709551615) == 18446744073709551615
; run: %select_spectre_guard_i64_slt(0, 32, 18446744073709551615) == 32
; run: %select_spectre_guard_i64_slt(-128, 32, -1) == 32
; run: %select_spectre_guard_i64_slt(42, 32, 18446744073709551615) == 18446744073709551615
function %selectif_spectre_guard_i128_slt(i8, i128, i128) -> i128 {
function %select_spectre_guard_i128_slt(i8, i128, i128) -> i128 {
block0(v0: i8, v1: i128, v2: i128):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i128 slt v4, v1, v2
v4 = icmp slt v0, v3
v5 = select_spectre_guard.i128 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i128_slt(0, 32, 19000000000000000000) == 32
; run: %selectif_spectre_guard_i128_slt(-128, 32, -1) == 32
; run: %selectif_spectre_guard_i128_slt(42, 32, 19000000000000000000) == 19000000000000000000
; run: %select_spectre_guard_i128_slt(0, 32, 19000000000000000000) == 32
; run: %select_spectre_guard_i128_slt(-128, 32, -1) == 32
; run: %select_spectre_guard_i128_slt(42, 32, 19000000000000000000) == 19000000000000000000
function %selectif_spectre_guard_i8_sle(i8, i8, i8) -> i8 {
function %select_spectre_guard_i8_sle(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i8 sle v4, v1, v2
v4 = icmp sle v0, v3
v5 = select_spectre_guard.i8 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i8_sle(0, 32, 127) == 32
; run: %selectif_spectre_guard_i8_sle(-128, 32, -1) == 32
; run: %selectif_spectre_guard_i8_sle(127, 32, -1) == -1
; run: %selectif_spectre_guard_i8_sle(127, 32, 127) == 127
; run: %selectif_spectre_guard_i8_sle(42, 32, 127) == 32
; run: %select_spectre_guard_i8_sle(0, 32, 127) == 32
; run: %select_spectre_guard_i8_sle(-128, 32, -1) == 32
; run: %select_spectre_guard_i8_sle(127, 32, -1) == -1
; run: %select_spectre_guard_i8_sle(127, 32, 127) == 127
; run: %select_spectre_guard_i8_sle(42, 32, 127) == 32
function %selectif_spectre_guard_i16_sle(i8, i16, i16) -> i16 {
function %select_spectre_guard_i16_sle(i8, i16, i16) -> i16 {
block0(v0: i8, v1: i16, v2: i16):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i16 sle v4, v1, v2
v4 = icmp sle v0, v3
v5 = select_spectre_guard.i16 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i16_sle(0, 32, 65535) == 32
; run: %selectif_spectre_guard_i16_sle(-128, 32, -1) == 32
; run: %selectif_spectre_guard_i16_sle(127, 32, -1) == -1
; run: %selectif_spectre_guard_i16_sle(127, 32, 65535) == 65535
; run: %selectif_spectre_guard_i16_sle(42, 32, 65535) == 32
; run: %select_spectre_guard_i16_sle(0, 32, 65535) == 32
; run: %select_spectre_guard_i16_sle(-128, 32, -1) == 32
; run: %select_spectre_guard_i16_sle(127, 32, -1) == -1
; run: %select_spectre_guard_i16_sle(127, 32, 65535) == 65535
; run: %select_spectre_guard_i16_sle(42, 32, 65535) == 32
function %selectif_spectre_guard_i32_sle(i8, i32, i32) -> i32 {
function %select_spectre_guard_i32_sle(i8, i32, i32) -> i32 {
block0(v0: i8, v1: i32, v2: i32):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i32 sle v4, v1, v2
v4 = icmp sle v0, v3
v5 = select_spectre_guard.i32 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i32_sle(0, 32, 4294967295) == 32
; run: %selectif_spectre_guard_i32_sle(-128, 32, -1) == 32
; run: %selectif_spectre_guard_i32_sle(127, 32, -1) == -1
; run: %selectif_spectre_guard_i32_sle(127, 32, 4294967295) == 4294967295
; run: %selectif_spectre_guard_i32_sle(42, 32, 4294967295) == 32
; run: %select_spectre_guard_i32_sle(0, 32, 4294967295) == 32
; run: %select_spectre_guard_i32_sle(-128, 32, -1) == 32
; run: %select_spectre_guard_i32_sle(127, 32, -1) == -1
; run: %select_spectre_guard_i32_sle(127, 32, 4294967295) == 4294967295
; run: %select_spectre_guard_i32_sle(42, 32, 4294967295) == 32
function %selectif_spectre_guard_i64_sle(i8, i64, i64) -> i64 {
function %select_spectre_guard_i64_sle(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i64 sle v4, v1, v2
v4 = icmp sle v0, v3
v5 = select_spectre_guard.i64 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i64_sle(0, 32, 18446744073709551615) == 32
; run: %selectif_spectre_guard_i64_sle(-128, 32, -1) == 32
; run: %selectif_spectre_guard_i64_sle(127, 32, -1) == -1
; run: %selectif_spectre_guard_i64_sle(127, 32, 18446744073709551615) == 18446744073709551615
; run: %selectif_spectre_guard_i64_sle(42, 32, 18446744073709551615) == 32
; run: %select_spectre_guard_i64_sle(0, 32, 18446744073709551615) == 32
; run: %select_spectre_guard_i64_sle(-128, 32, -1) == 32
; run: %select_spectre_guard_i64_sle(127, 32, -1) == -1
; run: %select_spectre_guard_i64_sle(127, 32, 18446744073709551615) == 18446744073709551615
; run: %select_spectre_guard_i64_sle(42, 32, 18446744073709551615) == 32
function %selectif_spectre_guard_i128_sle(i8, i128, i128) -> i128 {
function %select_spectre_guard_i128_sle(i8, i128, i128) -> i128 {
block0(v0: i8, v1: i128, v2: i128):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i128 sle v4, v1, v2
v4 = icmp sle v0, v3
v5 = select_spectre_guard.i128 v4, v1, v2
return v5
}
; run: %selectif_spectre_guard_i128_sle(0, 32, 19000000000000000000) == 32
; run: %selectif_spectre_guard_i128_sle(-128, 32, -1) == 32
; run: %selectif_spectre_guard_i128_sle(127, 32, -1) == -1
; run: %selectif_spectre_guard_i128_sle(127, 32, 19000000000000000000) == 19000000000000000000
; run: %selectif_spectre_guard_i128_sle(42, 32, 19000000000000000000) == 32
; run: %select_spectre_guard_i128_sle(0, 32, 19000000000000000000) == 32
; run: %select_spectre_guard_i128_sle(-128, 32, -1) == 32
; run: %select_spectre_guard_i128_sle(127, 32, -1) == -1
; run: %select_spectre_guard_i128_sle(127, 32, 19000000000000000000) == 19000000000000000000
; run: %select_spectre_guard_i128_sle(42, 32, 19000000000000000000) == 32

View File

@@ -1,316 +0,0 @@
test interpret
test run
set enable_llvm_abi_extensions=true
target aarch64
target x86_64
; `selectif` panics on s390x.
function %selectif_i8_eq(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i8 eq v4, v1, v2
return v5
}
; run: %selectif_i8_eq(0, 32, 255) == 255
; run: %selectif_i8_eq(255, 32, -1) == -1
; run: %selectif_i8_eq(42, 32, 255) == 32
function %selectif_i16_eq(i8, i16, i16) -> i16 {
block0(v0: i8, v1: i16, v2: i16):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i16 eq v4, v1, v2
return v5
}
; run: %selectif_i16_eq(0, 32, 65535) == 65535
; run: %selectif_i16_eq(255, 32, -1) == -1
; run: %selectif_i16_eq(42, 32, 65535) == 32
function %selectif_i32_eq(i8, i32, i32) -> i32 {
block0(v0: i8, v1: i32, v2: i32):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i32 eq v4, v1, v2
return v5
}
; run: %selectif_i32_eq(0, 32, 4294967295) == 4294967295
; run: %selectif_i32_eq(255, 32, -1) == -1
; run: %selectif_i32_eq(42, 32, 4294967295) == 32
function %selectif_i64_eq(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i64 eq v4, v1, v2
return v5
}
; run: %selectif_i64_eq(0, 32, 18446744073709551615) == 18446744073709551615
; run: %selectif_i64_eq(255, 32, -1) == -1
; run: %selectif_i64_eq(42, 32, 18446744073709551615) == 32
function %selectif_i128_eq(i8, i128, i128) -> i128 {
block0(v0: i8, v1: i128, v2: i128):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i128 eq v4, v1, v2
return v5
}
; run: %selectif_i128_eq(0, 32, 19000000000000000000) == 19000000000000000000
; run: %selectif_i128_eq(255, 32, -1) == -1
; run: %selectif_i128_eq(42, 32, 19000000000000000000) == 32
function %selectif_i8_ult(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i8 ult v4, v1, v2
return v5
}
; run: %selectif_i8_ult(0, 32, 255) == 32
; run: %selectif_i8_ult(255, 32, -1) == -1
; run: %selectif_i8_ult(42, 32, 255) == 255
function %selectif_i16_ult(i8, i16, i16) -> i16 {
block0(v0: i8, v1: i16, v2: i16):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i16 ult v4, v1, v2
return v5
}
; run: %selectif_i16_ult(0, 32, 65535) == 32
; run: %selectif_i16_ult(255, 32, -1) == -1
; run: %selectif_i16_ult(42, 32, 65535) == 65535
function %selectif_i32_ult(i8, i32, i32) -> i32 {
block0(v0: i8, v1: i32, v2: i32):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i32 ult v4, v1, v2
return v5
}
; run: %selectif_i32_ult(0, 32, 4294967295) == 32
; run: %selectif_i32_ult(255, 32, -1) == -1
; run: %selectif_i32_ult(42, 32, 4294967295) == 4294967295
function %selectif_i64_ult(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i64 ult v4, v1, v2
return v5
}
; run: %selectif_i64_ult(0, 32, 18446744073709551615) == 32
; run: %selectif_i64_ult(255, 32, -1) == -1
; run: %selectif_i64_ult(42, 32, 18446744073709551615) == 18446744073709551615
function %selectif_i128_ult(i8, i128, i128) -> i128 {
block0(v0: i8, v1: i128, v2: i128):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i128 ult v4, v1, v2
return v5
}
; run: %selectif_i128_ult(0, 32, 19000000000000000000) == 32
; run: %selectif_i128_ult(255, 32, -1) == -1
; run: %selectif_i128_ult(42, 32, 19000000000000000000) == 19000000000000000000
function %selectif_i8_ule(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i8 ule v4, v1, v2
return v5
}
; run: %selectif_i8_ule(0, 32, 255) == 32
; run: %selectif_i8_ule(255, 32, -1) == -1
; run: %selectif_i8_ule(42, 32, 255) == 32
function %selectif_i16_ule(i8, i16, i16) -> i16 {
block0(v0: i8, v1: i16, v2: i16):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i16 ule v4, v1, v2
return v5
}
; run: %selectif_i16_ule(0, 32, 65535) == 32
; run: %selectif_i16_ule(255, 32, -1) == -1
; run: %selectif_i16_ule(42, 32, 65535) == 32
function %selectif_i32_ule(i8, i32, i32) -> i32 {
block0(v0: i8, v1: i32, v2: i32):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i32 ule v4, v1, v2
return v5
}
; run: %selectif_i32_ule(0, 32, 4294967295) == 32
; run: %selectif_i32_ule(255, 32, -1) == -1
; run: %selectif_i32_ule(42, 32, 4294967295) == 32
function %selectif_i64_ule(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i64 ule v4, v1, v2
return v5
}
; run: %selectif_i64_ule(0, 32, 18446744073709551615) == 32
; run: %selectif_i64_ule(255, 32, -1) == -1
; run: %selectif_i64_ule(42, 32, 18446744073709551615) == 32
function %selectif_i128_ule(i8, i128, i128) -> i128 {
block0(v0: i8, v1: i128, v2: i128):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i128 ule v4, v1, v2
return v5
}
; run: %selectif_i128_ule(0, 32, 19000000000000000000) == 32
; run: %selectif_i128_ule(255, 32, -1) == -1
; run: %selectif_i128_ule(42, 32, 19000000000000000000) == 32
function %selectif_i8_slt(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i8 slt v4, v1, v2
return v5
}
; run: %selectif_i8_slt(0, 32, 255) == 32
; run: %selectif_i8_slt(-128, 32, -1) == 32
; run: %selectif_i8_slt(42, 32, 255) == 255
function %selectif_i16_slt(i8, i16, i16) -> i16 {
block0(v0: i8, v1: i16, v2: i16):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i16 slt v4, v1, v2
return v5
}
; run: %selectif_i16_slt(0, 32, 65535) == 32
; run: %selectif_i16_slt(-128, 32, -1) == 32
; run: %selectif_i16_slt(42, 32, 65535) == 65535
function %selectif_i32_slt(i8, i32, i32) -> i32 {
block0(v0: i8, v1: i32, v2: i32):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i32 slt v4, v1, v2
return v5
}
; run: %selectif_i32_slt(0, 32, 4294967295) == 32
; run: %selectif_i32_slt(-128, 32, -1) == 32
; run: %selectif_i32_slt(42, 32, 4294967295) == 4294967295
function %selectif_i64_slt(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i64 slt v4, v1, v2
return v5
}
; run: %selectif_i64_slt(0, 32, 18446744073709551615) == 32
; run: %selectif_i64_slt(-128, 32, -1) == 32
; run: %selectif_i64_slt(42, 32, 18446744073709551615) == 18446744073709551615
function %selectif_i128_slt(i8, i128, i128) -> i128 {
block0(v0: i8, v1: i128, v2: i128):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i128 slt v4, v1, v2
return v5
}
; run: %selectif_i128_slt(0, 32, 19000000000000000000) == 32
; run: %selectif_i128_slt(-128, 32, -1) == 32
; run: %selectif_i128_slt(42, 32, 19000000000000000000) == 19000000000000000000
function %selectif_i8_sle(i8, i8, i8) -> i8 {
block0(v0: i8, v1: i8, v2: i8):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i8 sle v4, v1, v2
return v5
}
; run: %selectif_i8_sle(0, 32, 127) == 32
; run: %selectif_i8_sle(-128, 32, -1) == 32
; run: %selectif_i8_sle(127, 32, -1) == -1
; run: %selectif_i8_sle(127, 32, 127) == 127
; run: %selectif_i8_sle(42, 32, 127) == 32
function %selectif_i16_sle(i8, i16, i16) -> i16 {
block0(v0: i8, v1: i16, v2: i16):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i16 sle v4, v1, v2
return v5
}
; run: %selectif_i16_sle(0, 32, 65535) == 32
; run: %selectif_i16_sle(-128, 32, -1) == 32
; run: %selectif_i16_sle(127, 32, -1) == -1
; run: %selectif_i16_sle(127, 32, 65535) == 65535
; run: %selectif_i16_sle(42, 32, 65535) == 32
function %selectif_i32_sle(i8, i32, i32) -> i32 {
block0(v0: i8, v1: i32, v2: i32):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i32 sle v4, v1, v2
return v5
}
; run: %selectif_i32_sle(0, 32, 4294967295) == 32
; run: %selectif_i32_sle(-128, 32, -1) == 32
; run: %selectif_i32_sle(127, 32, -1) == -1
; run: %selectif_i32_sle(127, 32, 4294967295) == 4294967295
; run: %selectif_i32_sle(42, 32, 4294967295) == 32
function %selectif_i64_sle(i8, i64, i64) -> i64 {
block0(v0: i8, v1: i64, v2: i64):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i64 sle v4, v1, v2
return v5
}
; run: %selectif_i64_sle(0, 32, 18446744073709551615) == 32
; run: %selectif_i64_sle(-128, 32, -1) == 32
; run: %selectif_i64_sle(127, 32, -1) == -1
; run: %selectif_i64_sle(127, 32, 18446744073709551615) == 18446744073709551615
; run: %selectif_i64_sle(42, 32, 18446744073709551615) == 32
function %selectif_i128_sle(i8, i128, i128) -> i128 {
block0(v0: i8, v1: i128, v2: i128):
v3 = iconst.i8 42
v4 = ifcmp v0, v3
v5 = selectif.i128 sle v4, v1, v2
return v5
}
; run: %selectif_i128_sle(0, 32, 19000000000000000000) == 32
; run: %selectif_i128_sle(-128, 32, -1) == 32
; run: %selectif_i128_sle(127, 32, -1) == -1
; run: %selectif_i128_sle(127, 32, 19000000000000000000) == 19000000000000000000
; run: %selectif_i128_sle(42, 32, 19000000000000000000) == 32

View File

@@ -1,110 +0,0 @@
test interpret
test run
target aarch64
; `true{if,ff}` not implemented on x86_64, and panics on s390x.
function %trueif_i8_eq(i8, i8) -> i8 {
block0(v0: i8, v1: i8):
v2 = ifcmp v0, v1
v3 = trueif eq v2
return v3
}
; run: %trueif_i8_eq(42, 42) == 1
; run: %trueif_i8_eq(-1, 255) == 1
; run: %trueif_i8_eq(255, 0) == 0
; run: %trueif_i8_eq(32, 64) == 0
function %trueif_i16_eq(i16, i16) -> i8 {
block0(v0: i16, v1: i16):
v2 = ifcmp v0, v1
v3 = trueif eq v2
return v3
}
; run: %trueif_i16_eq(42, 42) == 1
; run: %trueif_i16_eq(-1, 65535) == 1
; run: %trueif_i16_eq(65535, 0) == 0
; run: %trueif_i16_eq(32, 64) == 0
function %trueif_i32_eq(i32, i32) -> i8 {
block0(v0: i32, v1: i32):
v2 = ifcmp v0, v1
v3 = trueif eq v2
return v3
}
; run: %trueif_i32_eq(42, 42) == 1
; run: %trueif_i32_eq(-1, 4294967295) == 1
; run: %trueif_i32_eq(4294967295, 0) == 0
; run: %trueif_i32_eq(32, 64) == 0
function %trueif_i64_eq(i64, i64) -> i8 {
block0(v0: i64, v1: i64):
v2 = ifcmp v0, v1
v3 = trueif eq v2
return v3
}
; run: %trueif_i64_eq(42, 42) == 1
; run: %trueif_i64_eq(-1, 18446744073709551615) == 1
; run: %trueif_i64_eq(18446744073709551615, 0) == 0
; run: %trueif_i64_eq(32, 64) == 0
function %trueif_i128_eq(i128, i128) -> i8 {
block0(v0: i128, v1: i128):
v2 = ifcmp v0, v1
v3 = trueif eq v2
return v3
}
; run: %trueif_i128_eq(42, 42) == 1
; run: %trueif_i128_eq(-1, 18446744073709551615) == 0
; run: %trueif_i128_eq(19000000000000000000, 0) == 0
; run: %trueif_i128_eq(32, 64) == 0
function %trueff_f32_eq(f32, f32) -> i8 {
block0(v0: f32, v1: f32):
v2 = ffcmp v0, v1
v3 = trueff eq v2
return v3
}
; run: %trueff_f32_eq(0x42.0, 0x42.0) == 1
; run: %trueff_f32_eq(-0x1.0, -0x1.0) == 1
; run: %trueff_f32_eq(0x1.0, 0x0.0) == 0
function %trueff_f64_eq(f64, f64) -> i8 {
block0(v0: f64, v1: f64):
v2 = ffcmp v0, v1
v3 = trueff eq v2
return v3
}
; run: %trueff_f64_eq(0x42.0, 0x42.0) == 1
; run: %trueff_f64_eq(-0x1.0, -0x1.0) == 1
; run: %trueff_f64_eq(0x1.0, 0x0.0) == 0
function %trueff_f32_ne(f32, f32) -> i8 {
block0(v0: f32, v1: f32):
v2 = ffcmp v0, v1
v3 = trueff ne v2
return v3
}
; run: %trueff_f32_ne(0x42.0, 0x42.0) == 0
; run: %trueff_f32_ne(-0x1.0, -0x1.0) == 0
; run: %trueff_f32_ne(0x1.0, 0x0.0) == 1
; run: %trueff_f32_ne(NaN, NaN) == 1
function %trueff_f64_ne(f64, f64) -> i8 {
block0(v0: f64, v1: f64):
v2 = ffcmp v0, v1
v3 = trueff ne v2
return v3
}
; run: %trueff_f64_ne(0x42.0, 0x42.0) == 0
; run: %trueff_f64_ne(-0x1.0, -0x1.0) == 0
; run: %trueff_f64_ne(0x1.0, 0x0.0) == 1
; run: %trueff_f64_ne(NaN, NaN) == 1

View File

@@ -18,14 +18,10 @@ function %cpu_flags() -> i8 {
block0:
v0 = iconst.i32 7
v1 = iconst.i32 8
v2 = ifcmp v0, v1
v3 = trueif eq v2
v4 = ifcmp v0, v1
v5 = trueif eq v4
v6 = bor v3, v5
; check: v2 = ifcmp v0, v1
; check: v3 = trueif eq v2
; check: v4 = ifcmp v0, v1
; check: v5 = trueif eq v4
return v6
v2 = icmp eq v0, v1
v3 = icmp eq v0, v1
v4 = bor v2, v3
; check: v2 = icmp eq v0, v1
; check: v4 = bor v2, v2
return v4
}

View File

@@ -55,28 +55,3 @@ block2:
; nextln: v4 = iconst.i32 2
; nextln: return v4
; nextln: }
function %br_icmp_inversion(i32, i32) -> i32 {
block0(v0: i32, v1: i32):
br_icmp ugt v0, v1, block1
jump block2
block1:
v2 = iconst.i32 1
return v2
block2:
v3 = iconst.i32 2
return v3
}
; sameln: function %br_icmp_inversion
; nextln: block0(v0: i32, v1: i32):
; nextln: br_icmp ule v0, v1, block2
; nextln: jump block1
; nextln:
; nextln: block1:
; nextln: v2 = iconst.i32 1
; nextln: return v2
; nextln:
; nextln: block2:
; nextln: v3 = iconst.i32 2
; nextln: return v3
; nextln: }