bytecodealliance / wasmtime

A fast and secure runtime for WebAssembly
https://wasmtime.dev/
Apache License 2.0
15.44k stars 1.3k forks source link

Cranelift: `fpromote.f32` seems not be implemented on x86_64 #9654

Open abc767234318 opened 3 days ago

abc767234318 commented 3 days ago

I constructed a clif file. multi_func0.zip I used the following command to run it.

clif-util run -v file_tests/multi_func0.clif

But I got the following error:

thread 'main' panicked at cranelift/codegen/src/machinst/lower.rs:685:21:
should be implemented in ISLE: inst = `v37 = fpromote.f32 v19`, type = `Some(types::F32)`
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
bjorn3 commented 3 days ago

fpromote requires a float as input, not an i16. If you run the clif ir verifier on this input file it will likely catch this issue. Also please try to use bugpoint in the future to reduce your test case: https://github.com/bytecodealliance/wasmtime/blob/main/cranelift/src/bugpoint.rs Something like cd cranelift; cargo run -- bugpoint multi_func0.clif x86_64 would have worked in this particular case I think.

abc767234318 commented 3 days ago

fpromote requires a float as input, not an i16. If you run the clif ir verifier on this input file it will likely catch this issue. Also please try to use bugpoint in the future to reduce your test case: https://github.com/bytecodealliance/wasmtime/blob/main/cranelift/src/bugpoint.rs Something like cd cranelift; cargo run -- bugpoint multi_func0.clif x86_64 would have worked in this particular case I think.

Why the type of v19 is i16? The v19 is generated by the following two instructions.

line 678:  v7 = f16const -0x1.774p-9
line 741:  v19 = bnot.f16 v7  ; v7 = -0x1.774p-9

My understanding is that the type of v19 is f16, not sure what is wrong

bjorn3 commented 3 days ago

I didn't notice that you had multiple functions in the clif file.

f16 and f128 is currently basically unsupported in Cranelift. Anything beyond passing around f16 and f128 values should be assumed to not yet be implemented.