Stream: git-wasmtime

Topic: wasmtime / issue #12170 Cranelift: unimplemented for > 64...


view this post on Zulip Wasmtime GitHub notifications bot (Dec 16 2025 at 12:12):

abc767234318 opened issue #12170:

.clif Test Case

test run

set enable_nan_canonicalization=true
set preserve_frame_pointers=true
set enable_multi_ret_implicit_sret=true
set opt_level=none

target x86_64 sse42 has_avx
target aarch64
target s390x
target riscv64gc has_zcd has_zbkb has_zbc has_zbs has_zicond has_zvl32b has_zvl64b has_zvl128b has_zvl1024b has_zvl2048b has_zvl4096b has_zvl8192b has_zvl16384b has_zvl32768b

function %main() -> f64 fast {
    ss0 = explicit_slot 32
    ss1 = explicit_slot 32
    const0 = 0xfa2675c080000000e8a433230a7479e5

block0:
    v1 = iconst.i16 1348
    v2 = f64const -0x1.e10d21f69a163p995
    v3 = vconst.i32x4 const0
    v4 = smin.i32x4 v3, v3  ; v3 = const0, v3 = const0
    v5 = clz.i16 v1  ; v1 = 1348
    v6 = icmp.i32x4 slt v3, v4  ; v3 = const0

    return v2
}

; print: %main()

Steps to Reproduce

This test case processed successfully when the opt_level=none, but if I change it to the opt_level=speed, it will throw thread 'main' panicked at cranelift/codegen/src/opts.rs:191:5: unimplemented for > 64 bits.

Expected Results

%main() -> -0x1.e10d21f69a163p995

Actual Results

thread 'main' panicked at cranelift/codegen/src/opts.rs:191:5:
unimplemented for > 64 bits
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

view this post on Zulip Wasmtime GitHub notifications bot (Dec 16 2025 at 12:12):

abc767234318 added the bug label to Issue #12170.

view this post on Zulip Wasmtime GitHub notifications bot (Dec 16 2025 at 12:12):

abc767234318 added the cranelift label to Issue #12170.

view this post on Zulip Wasmtime GitHub notifications bot (Dec 18 2025 at 18:11):

alexcrichton commented on issue #12170:

@abc767234318 it looks like reporting this may have gone awry by accident as the source here says set opt_level=none, but I believe set opt_level=speed is needed to reproduce. After changing that I can reproduce myself.

@cfallin w.r.t. this comment personally I think we still want to investigate these sorts of issues. For example this isn't an esoteric instruction, this input:

(module
  (func (export "hi") (result v128)
    (local $i v128)
    v128.const i64x2 0xfa2675c080000000 0xe8a433230a7479e5
    local.set $i
    local.get $i
    local.get $i
    local.get $i
    i32x4.min_s
    i32x4.lt_s
  )
)

fails with:

$ cargo run foo.wat
...

thread '<unnamed>' (7768935) panicked at cranelift/codegen/src/opts.rs:191:5:
unimplemented for > 64 bits
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

so this is not a case of an obscure cranelift instruction on an obscure platform, but definitely reachable from wasm and is something we should fix.

view this post on Zulip Wasmtime GitHub notifications bot (Dec 18 2025 at 18:12):

alexcrichton added the fuzz-bug label to Issue #12170.

view this post on Zulip Wasmtime GitHub notifications bot (Dec 18 2025 at 18:16):

cfallin commented on issue #12170:

Ah, I missed that this was reachable from Wasm -- yes, it'd still be nice to build the table of missing corners in the full CLIF-space but this is higher priority, agreed.

view this post on Zulip Wasmtime GitHub notifications bot (Dec 18 2025 at 18:53):

cfallin closed issue #12170:

.clif Test Case

test run

set enable_nan_canonicalization=true
set preserve_frame_pointers=true
set enable_multi_ret_implicit_sret=true
set opt_level=none

target x86_64 sse42 has_avx
target aarch64
target s390x
target riscv64gc has_zcd has_zbkb has_zbc has_zbs has_zicond has_zvl32b has_zvl64b has_zvl128b has_zvl1024b has_zvl2048b has_zvl4096b has_zvl8192b has_zvl16384b has_zvl32768b

function %main() -> f64 fast {
    ss0 = explicit_slot 32
    ss1 = explicit_slot 32
    const0 = 0xfa2675c080000000e8a433230a7479e5

block0:
    v1 = iconst.i16 1348
    v2 = f64const -0x1.e10d21f69a163p995
    v3 = vconst.i32x4 const0
    v4 = smin.i32x4 v3, v3  ; v3 = const0, v3 = const0
    v5 = clz.i16 v1  ; v1 = 1348
    v6 = icmp.i32x4 slt v3, v4  ; v3 = const0

    return v2
}

; print: %main()

Steps to Reproduce

This test case processed successfully when the opt_level=none, but if I change it to the opt_level=speed, it will throw thread 'main' panicked at cranelift/codegen/src/opts.rs:191:5: unimplemented for > 64 bits.

Expected Results

%main() -> -0x1.e10d21f69a163p995

Actual Results

thread 'main' panicked at cranelift/codegen/src/opts.rs:191:5:
unimplemented for > 64 bits
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Last updated: Jan 09 2026 at 13:15 UTC