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:
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user