Files
wasmtime/cranelift/filetests/filetests/runtests/i128-load-store.clif
Trevor Elliott 32a7593c94 cranelift: Remove booleans (#5031)
Remove the boolean types from cranelift, and the associated instructions breduce, bextend, bconst, and bint. Standardize on using 1/0 for the return value from instructions that produce scalar boolean results, and -1/0 for boolean vector elements.

Fixes #3205

Co-authored-by: Afonso Bordado <afonso360@users.noreply.github.com>
Co-authored-by: Ulrich Weigand <ulrich.weigand@de.ibm.com>
Co-authored-by: Chris Fallin <chris@cfallin.org>
2022-10-17 16:00:27 -07:00

111 lines
3.8 KiB
Plaintext

test run
set enable_llvm_abi_extensions=true
; Disable stack probes since these tests don't require them
set enable_probestack=false
target x86_64
target aarch64
target riscv64
target s390x
function %i128_stack_store_load(i128) -> i8 {
ss0 = explicit_slot 16
block0(v0: i128):
stack_store.i128 v0, ss0
v1 = stack_load.i128 ss0
v2 = icmp.i128 eq v0, v1
return v2
}
; run: %i128_stack_store_load(0) == 1
; run: %i128_stack_store_load(-1) == 1
; run: %i128_stack_store_load(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == 1
; run: %i128_stack_store_load(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 1
; run: %i128_stack_store_load(0xFEDCBA98_76543210_01234567_89ABCDEF) == 1
; run: %i128_stack_store_load(0xA00A00A0_0A00A00A_06060606_06060606) == 1
; run: %i128_stack_store_load(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == 1
function %i128_stack_store_load_inst_offset(i128) -> i8 {
ss0 = explicit_slot 16
ss1 = explicit_slot 16
ss2 = explicit_slot 16
block0(v0: i128):
stack_store.i128 v0, ss1+16
v1 = stack_load.i128 ss1+16
v2 = icmp.i128 eq v0, v1
return v2
}
; run: %i128_stack_store_load_inst_offset(0) == 1
; run: %i128_stack_store_load_inst_offset(-1) == 1
; run: %i128_stack_store_load_inst_offset(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == 1
; run: %i128_stack_store_load_inst_offset(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 1
; run: %i128_stack_store_load_inst_offset(0xFEDCBA98_76543210_01234567_89ABCDEF) == 1
; run: %i128_stack_store_load_inst_offset(0xA00A00A0_0A00A00A_06060606_06060606) == 1
; run: %i128_stack_store_load_inst_offset(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == 1
; Some arches (aarch64) try to encode the offset into the load/store instructions
; test that we spill if the offset is too large and doesn't fit in the instruction
function %i128_stack_store_load_big_offset(i128) -> i8 {
ss0 = explicit_slot 100000
ss1 = explicit_slot 8
block0(v0: i128):
stack_store.i128 v0, ss0
v1 = stack_load.i128 ss0
v2 = icmp.i128 eq v0, v1
return v2
}
; run: %i128_stack_store_load_big_offset(0) == 1
; run: %i128_stack_store_load_big_offset(-1) == 1
; run: %i128_stack_store_load_big_offset(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == 1
; run: %i128_stack_store_load_big_offset(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 1
; run: %i128_stack_store_load_big_offset(0xFEDCBA98_76543210_01234567_89ABCDEF) == 1
; run: %i128_stack_store_load_big_offset(0xA00A00A0_0A00A00A_06060606_06060606) == 1
; run: %i128_stack_store_load_big_offset(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == 1
function %i128_store_load(i128) -> i8 {
ss0 = explicit_slot 16
block0(v0: i128):
v1 = stack_addr.i64 ss0
store.i128 v0, v1
v2 = load.i128 v1
v3 = icmp.i128 eq v0, v2
return v3
}
; run: %i128_store_load(0) == 1
; run: %i128_store_load(-1) == 1
; run: %i128_store_load(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == 1
; run: %i128_store_load(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 1
; run: %i128_store_load(0xFEDCBA98_76543210_01234567_89ABCDEF) == 1
; run: %i128_store_load(0xA00A00A0_0A00A00A_06060606_06060606) == 1
; run: %i128_store_load(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == 1
function %i128_store_load_offset(i128) -> i8 {
ss0 = explicit_slot 32
block0(v0: i128):
v1 = stack_addr.i64 ss0
store.i128 v0, v1+16
v2 = load.i128 v1+16
v3 = icmp.i128 eq v0, v2
return v3
}
; run: %i128_store_load_offset(0) == 1
; run: %i128_store_load_offset(-1) == 1
; run: %i128_store_load_offset(0x00000000_00000000_FFFFFFFF_FFFFFFFF) == 1
; run: %i128_store_load_offset(0xFFFFFFFF_FFFFFFFF_00000000_00000000) == 1
; run: %i128_store_load_offset(0xFEDCBA98_76543210_01234567_89ABCDEF) == 1
; run: %i128_store_load_offset(0xA00A00A0_0A00A00A_06060606_06060606) == 1
; run: %i128_store_load_offset(0xDECAFFFF_C0FFEEEE_C0FFEEEE_DECAFFFF) == 1