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