Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cranelift: fcvt_from_{u,s}int not implemented for i128 on x64 #4900

Open
afonso360 opened this issue Sep 12, 2022 · 0 comments
Open

Cranelift: fcvt_from_{u,s}int not implemented for i128 on x64 #4900

afonso360 opened this issue Sep 12, 2022 · 0 comments
Labels
bug Incorrect behavior in the current implementation that needs fixing cranelift:area:x64 Issues related to x64 codegen cranelift Issues related to the Cranelift code generator

Comments

@afonso360
Copy link
Contributor

afonso360 commented Sep 12, 2022

👋 Hey,

This came up when trying to fuzz #4884

.clif Test Case

test run
set enable_llvm_abi_extensions
target x86_64

function %a(i128) -> f32 {
block0(v0: i128):
    v1 = fcvt_from_uint.f32 v0
    return v1
}
; run: %a(0) == 0.0

function %c(i128) -> f64 {
block0(v0: i128):
    v1 = fcvt_from_uint.f64 v0
    return v1
}
; run: %c(0) == 0.0

function %signed_a(i128) -> f32 {
block0(v0: i128):
    v1 = fcvt_from_sint.f32 v0
    return v1
}
; run: %signed_a(0) == 0.0

function %signed_c(i128) -> f64 {
block0(v0: i128):
    v1 = fcvt_from_sint.f64 v0
    return v1
}
; run: %signed_c(0) == 0.0

Steps to Reproduce

  • clif-util ./the-above.clif

Expected Results

The above tests to pass.

Actual Results

     Running `C:\Users\Afonso\CLionProjects\wasmtime\target\debug\clif-util.exe test .\lmao.clif`
thread 'worker #0' panicked at 'internal error: entered unreachable code: implemented in ISLE: inst = `v1 = fcvt_from_sint.f64 v0`, type = `Some(types::F64)`', cranelift\codegen\src\isa\x64\lower.rs:4
80:13
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
 ERROR cranelift_filetests::concurrent > FAIL: panicked in worker #0: internal error: entered unreachable code: implemented in ISLE: inst = `v1 = fcvt_from_sint.f64 v0`, type = `Some(types::F64)`     
FAIL .\lmao.clif: panicked in worker #0: internal error: entered unreachable code: implemented in ISLE: inst = `v1 = fcvt_from_sint.f64 v0`, type = `Some(types::F64)`
1 tests
Error: 1 failure

This fails in the first function but all the functions in all test cases crash with a similar error.

Versions and Environment

Cranelift version or commit: main
Operating system: Windows
Architecture: x64

Extra Info

Unlike with fcvt_to these seem to be implemented for i8 and i16.

cg_clif works around this by emitting a libcall: https://github.com/bjorn3/rustc_codegen_cranelift/blob/fa7660440b2581c4c57d896d50e76da1515de6df/src/cast.rs#L50-L85

@afonso360 afonso360 added bug Incorrect behavior in the current implementation that needs fixing cranelift Issues related to the Cranelift code generator labels Sep 12, 2022
@afonso360 afonso360 changed the title Cranelift: fcvt_from_{u,s}int not implemented for i128 types on x64 Cranelift: fcvt_from_{u,s}int not implemented for i128 on x64 Sep 12, 2022
@akirilov-arm akirilov-arm added the cranelift:area:x64 Issues related to x64 codegen label Sep 26, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Incorrect behavior in the current implementation that needs fixing cranelift:area:x64 Issues related to x64 codegen cranelift Issues related to the Cranelift code generator
Projects
None yet
Development

No branches or pull requests

2 participants