Stream: git-wasmtime

Topic: wasmtime / issue #12671 Cranelift: `internal error: enter...


view this post on Zulip Wasmtime GitHub notifications bot (Feb 25 2026 at 19:38):

vxpm opened issue #12671:

.clif Test Case

not reduced at all - sorry

function u0:0(i64, i64, i64, i64) tail {
    ss0 = explicit_slot 8, align = 8
    sig0 = (i64, i64, i64, i64) tail
    sig1 = (i64, i64, i64) -> i8 system_v
    sig2 = (i64, i32, i64) system_v
    sig3 = (i64, i32, i64) -> i8 system_v
    sig4 = (i64, i32, i64) -> i8 system_v
    sig5 = (i64, i32, i64) -> i8 system_v
    sig6 = (i64, i32, i64) -> i8 system_v
    sig7 = (i64, i32, i8) -> i8 system_v
    sig8 = (i64, i32, i16) -> i8 system_v
    sig9 = (i64, i32, i32) -> i8 system_v
    sig10 = (i64, i32, i64) -> i8 system_v
    sig11 = (i64, i32, i32, i64) -> i8 system_v
    sig12 = (i64, i32, i32, f64) -> i8 system_v
    sig13 = (i64, i32) system_v
    sig14 = (i64) system_v
    sig15 = (i64, i16) system_v
    fn0 = u1:0 sig15
    fn1 = u0:2 sig1
    fn2 = u0:3 sig2
    fn3 = u0:4 sig3
    fn4 = u0:5 sig4
    fn5 = u0:6 sig5
    fn6 = u0:7 sig6
    fn7 = u0:8 sig7
    fn8 = u0:9 sig8
    fn9 = u0:10 sig9
    fn10 = u0:11 sig10
    fn11 = u0:12 sig11
    fn12 = u0:13 sig12
    fn13 = u0:14 sig13
    fn14 = u0:15 sig14
    fn15 = u0:16 sig14
    fn16 = u0:17 sig14
    fn17 = u0:18 sig14
    fn18 = u0:19 sig14
    fn19 = u0:20 sig14
    fn20 = u0:21 sig14
    fn21 = u0:22 sig14
    fn22 = u0:23 sig14

                                block0(v0: i64, v1: i64, v2: i64, v3: i64):
@0000                               v4 = load.i32 notrap aligned v2+680
@0000                               v5 = iconst.i32 13
@0000                               v6 = ushr v4, v5  ; v5 = 13
@0000                               v7 = band_imm v6, 1
@0000                               v8 = ireduce.i8 v7
@0000                               brif v8, block2, block1

                                block1 cold:
@0000                               v9 = iconst.i16 2048
@0000                               call fn0(v2, v9)  ; v9 = 2048
@0000                               return

                                block2:
@0000                               v10 = load.f64x2 notrap aligned v2+632
@0000                               v11 = load.f64x2 notrap aligned v2+312
@0000                               v12 = fadd v10, v11
@0000                               v13 = extractlane v12, 0
@0000                               v14 = f64const 0.0
@0000                               v15 = fcmp lt v13, v14  ; v14 = 0.0
@0000                               v16 = fcmp gt v13, v14  ; v14 = 0.0
@0000                               v17 = fcmp eq v13, v14  ; v14 = 0.0
@0000                               v18 = fcmp uno v13, v14  ; v14 = 0.0
@0000                               v19 = load.i32 notrap aligned v2+652
@0000                               v20 = uextend.i32 v15
@0000                               v21 = uextend.i32 v16
@0000                               v22 = uextend.i32 v17
@0000                               v23 = uextend.i32 v18
@0000                               v24 = ishl_imm v20, 15
@0000                               v25 = ishl_imm v21, 14
@0000                               v26 = ishl_imm v22, 13
@0000                               v27 = ishl_imm v23, 12
@0000                               v28 = bor v24, v25
@0000                               v29 = bor v28, v26
@0000                               v30 = bor v29, v27
@0000                               v31 = iconst.i32 0x0001_f000
@0000                               v32 = band_not v19, v31  ; v31 = 0x0001_f000
@0000                               v33 = bor v32, v30
@0000                               v34 = load.i32 notrap aligned v2
@0000                               v35 = iadd_imm v34, 4
@0001                               v36 = f64const 0.0
@0001                               v37 = splat.f64x2 v36  ; v36 = 0.0
@0001                               v38 = load.f64x2 notrap aligned v2+280
@0001                               v39 = load.f64x2 notrap aligned v2+232
@0001                               v40 = load.f64x2 notrap aligned v2+216
@0001                               v41 = bitcast.i64x2 v39
@0001                               v42 = bitcast.i64x2 v40
@0001                               v43 = fcmp ge v38, v37
@0001                               v44 = select v43, v42, v41
@0001                               v45 = bitcast.f64x2 v44
@0001                               v46 = iadd_imm v35, 4
@0002                               v47 = fadd v38, v45
@0002                               v48 = extractlane v47, 0
@0002                               v49 = f64const 0.0
@0002                               v50 = fcmp lt v48, v49  ; v49 = 0.0
@0002                               v51 = fcmp gt v48, v49  ; v49 = 0.0
@0002                               v52 = fcmp eq v48, v49  ; v49 = 0.0
@0002                               v53 = fcmp uno v48, v49  ; v49 = 0.0
@0002                               v54 = uextend.i32 v50
@0002                               v55 = uextend.i32 v51
@0002                               v56 = uextend.i32 v52
@0002                               v57 = uextend.i32 v53
@0002                               v58 = ishl_imm v54, 15
@0002                               v59 = ishl_imm v55, 14
@0002                               v60 = ishl_imm v56, 13
@0002                               v61 = ishl_imm v57, 12
@0002                               v62 = bor v58, v59
@0002                               v63 = bor v62, v60
@0002                               v64 = bor v63, v61
@0002                               v65 = iconst.i32 0x0001_f000
@0002                               v66 = band_not v33, v65  ; v65 = 0x0001_f000
@0002                               v67 = bor v66, v64
@0002                               v68 = iadd_imm v46, 4
@0003                               v69 = f64const 0.0
@0003                               v70 = splat.f64x2 v69  ; v69 = 0.0
@0003                               v71 = load.f64x2 notrap aligned v2+264
@0003                               v72 = bitcast.i64x2 v39
@0003                               v73 = bitcast.i64x2 v40
@0003                               v74 = fcmp ge v71, v70
@0003                               v75 = select v74, v73, v72
@0003                               v76 = bitcast.f64x2 v75
@0003                               v77 = iadd_imm v68, 4
                                    store notrap aligned v77, v2
                                    store notrap aligned v67, v2+652
                                    store notrap aligned v76, v2+632
                                    store notrap aligned v47, v2+280
                                    store notrap aligned v12, v2+312
                                    v78 = load.i32 notrap aligned v0
                                    v79 = iadd_imm v78, 4
                                    store notrap aligned v79, v0
                                    v80 = load.i32 notrap aligned v0+4
                                    v81 = iadd_imm v80, 8
                                    store notrap aligned v81, v0+4
                                    return
}

Steps to Reproduce

seems to only happen when running on release..?

Expected Results

should not panic

Actual Results

panics

Versions and Environment

Cranelift version or commit: 0.129

Operating system: Linux 6.19.2-2-cachyos

Architecture: x86_64 (Ryzen 5 5600)

view this post on Zulip Wasmtime GitHub notifications bot (Feb 25 2026 at 19:38):

vxpm added the cranelift label to Issue #12671.

view this post on Zulip Wasmtime GitHub notifications bot (Feb 25 2026 at 19:38):

vxpm added the bug label to Issue #12671.

view this post on Zulip Wasmtime GitHub notifications bot (Feb 25 2026 at 19:42):

alexcrichton commented on issue #12671:

Can you detail a bit more where this IR came from? This IR does not pass Cranelift's validation which means it's not guaranteed to avoid panics in the backend. Is this a hand-reduction from a larger function? A buggy frontend? Something else?

view this post on Zulip Wasmtime GitHub notifications bot (Feb 25 2026 at 19:49):

vxpm commented on issue #12671:

it comes from my GameCube emulator, lazuli, and that's true - it does not pass validation. seems like this is my fault, as i disable validation on release builds and this wasn't triggering on debug builds, which have validation (so it's probably my codegen that's changing somehow).

sorry for the misreport - i'll close the issue!

view this post on Zulip Wasmtime GitHub notifications bot (Feb 25 2026 at 19:49):

vxpm edited a comment on issue #12671:

it comes from my GameCube emulator, lazuli, and you're right - it does not pass validation (i didn't notice that). seems like this is my fault, as i disable validation on release builds and this wasn't triggering on debug builds, which have validation (so it's probably my codegen that's changing somehow).

sorry for the misreport - i'll close the issue!

view this post on Zulip Wasmtime GitHub notifications bot (Feb 25 2026 at 19:49):

vxpm closed issue #12671:

.clif Test Case

not reduced at all - sorry

function u0:0(i64, i64, i64, i64) tail {
    ss0 = explicit_slot 8, align = 8
    sig0 = (i64, i64, i64, i64) tail
    sig1 = (i64, i64, i64) -> i8 system_v
    sig2 = (i64, i32, i64) system_v
    sig3 = (i64, i32, i64) -> i8 system_v
    sig4 = (i64, i32, i64) -> i8 system_v
    sig5 = (i64, i32, i64) -> i8 system_v
    sig6 = (i64, i32, i64) -> i8 system_v
    sig7 = (i64, i32, i8) -> i8 system_v
    sig8 = (i64, i32, i16) -> i8 system_v
    sig9 = (i64, i32, i32) -> i8 system_v
    sig10 = (i64, i32, i64) -> i8 system_v
    sig11 = (i64, i32, i32, i64) -> i8 system_v
    sig12 = (i64, i32, i32, f64) -> i8 system_v
    sig13 = (i64, i32) system_v
    sig14 = (i64) system_v
    sig15 = (i64, i16) system_v
    fn0 = u1:0 sig15
    fn1 = u0:2 sig1
    fn2 = u0:3 sig2
    fn3 = u0:4 sig3
    fn4 = u0:5 sig4
    fn5 = u0:6 sig5
    fn6 = u0:7 sig6
    fn7 = u0:8 sig7
    fn8 = u0:9 sig8
    fn9 = u0:10 sig9
    fn10 = u0:11 sig10
    fn11 = u0:12 sig11
    fn12 = u0:13 sig12
    fn13 = u0:14 sig13
    fn14 = u0:15 sig14
    fn15 = u0:16 sig14
    fn16 = u0:17 sig14
    fn17 = u0:18 sig14
    fn18 = u0:19 sig14
    fn19 = u0:20 sig14
    fn20 = u0:21 sig14
    fn21 = u0:22 sig14
    fn22 = u0:23 sig14

                                block0(v0: i64, v1: i64, v2: i64, v3: i64):
@0000                               v4 = load.i32 notrap aligned v2+680
@0000                               v5 = iconst.i32 13
@0000                               v6 = ushr v4, v5  ; v5 = 13
@0000                               v7 = band_imm v6, 1
@0000                               v8 = ireduce.i8 v7
@0000                               brif v8, block2, block1

                                block1 cold:
@0000                               v9 = iconst.i16 2048
@0000                               call fn0(v2, v9)  ; v9 = 2048
@0000                               return

                                block2:
@0000                               v10 = load.f64x2 notrap aligned v2+632
@0000                               v11 = load.f64x2 notrap aligned v2+312
@0000                               v12 = fadd v10, v11
@0000                               v13 = extractlane v12, 0
@0000                               v14 = f64const 0.0
@0000                               v15 = fcmp lt v13, v14  ; v14 = 0.0
@0000                               v16 = fcmp gt v13, v14  ; v14 = 0.0
@0000                               v17 = fcmp eq v13, v14  ; v14 = 0.0
@0000                               v18 = fcmp uno v13, v14  ; v14 = 0.0
@0000                               v19 = load.i32 notrap aligned v2+652
@0000                               v20 = uextend.i32 v15
@0000                               v21 = uextend.i32 v16
@0000                               v22 = uextend.i32 v17
@0000                               v23 = uextend.i32 v18
@0000                               v24 = ishl_imm v20, 15
@0000                               v25 = ishl_imm v21, 14
@0000                               v26 = ishl_imm v22, 13
@0000                               v27 = ishl_imm v23, 12
@0000                               v28 = bor v24, v25
@0000                               v29 = bor v28, v26
@0000                               v30 = bor v29, v27
@0000                               v31 = iconst.i32 0x0001_f000
@0000                               v32 = band_not v19, v31  ; v31 = 0x0001_f000
@0000                               v33 = bor v32, v30
@0000                               v34 = load.i32 notrap aligned v2
@0000                               v35 = iadd_imm v34, 4
@0001                               v36 = f64const 0.0
@0001                               v37 = splat.f64x2 v36  ; v36 = 0.0
@0001                               v38 = load.f64x2 notrap aligned v2+280
@0001                               v39 = load.f64x2 notrap aligned v2+232
@0001                               v40 = load.f64x2 notrap aligned v2+216
@0001                               v41 = bitcast.i64x2 v39
@0001                               v42 = bitcast.i64x2 v40
@0001                               v43 = fcmp ge v38, v37
@0001                               v44 = select v43, v42, v41
@0001                               v45 = bitcast.f64x2 v44
@0001                               v46 = iadd_imm v35, 4
@0002                               v47 = fadd v38, v45
@0002                               v48 = extractlane v47, 0
@0002                               v49 = f64const 0.0
@0002                               v50 = fcmp lt v48, v49  ; v49 = 0.0
@0002                               v51 = fcmp gt v48, v49  ; v49 = 0.0
@0002                               v52 = fcmp eq v48, v49  ; v49 = 0.0
@0002                               v53 = fcmp uno v48, v49  ; v49 = 0.0
@0002                               v54 = uextend.i32 v50
@0002                               v55 = uextend.i32 v51
@0002                               v56 = uextend.i32 v52
@0002                               v57 = uextend.i32 v53
@0002                               v58 = ishl_imm v54, 15
@0002                               v59 = ishl_imm v55, 14
@0002                               v60 = ishl_imm v56, 13
@0002                               v61 = ishl_imm v57, 12
@0002                               v62 = bor v58, v59
@0002                               v63 = bor v62, v60
@0002                               v64 = bor v63, v61
@0002                               v65 = iconst.i32 0x0001_f000
@0002                               v66 = band_not v33, v65  ; v65 = 0x0001_f000
@0002                               v67 = bor v66, v64
@0002                               v68 = iadd_imm v46, 4
@0003                               v69 = f64const 0.0
@0003                               v70 = splat.f64x2 v69  ; v69 = 0.0
@0003                               v71 = load.f64x2 notrap aligned v2+264
@0003                               v72 = bitcast.i64x2 v39
@0003                               v73 = bitcast.i64x2 v40
@0003                               v74 = fcmp ge v71, v70
@0003                               v75 = select v74, v73, v72
@0003                               v76 = bitcast.f64x2 v75
@0003                               v77 = iadd_imm v68, 4
                                    store notrap aligned v77, v2
                                    store notrap aligned v67, v2+652
                                    store notrap aligned v76, v2+632
                                    store notrap aligned v47, v2+280
                                    store notrap aligned v12, v2+312
                                    v78 = load.i32 notrap aligned v0
                                    v79 = iadd_imm v78, 4
                                    store notrap aligned v79, v0
                                    v80 = load.i32 notrap aligned v0+4
                                    v81 = iadd_imm v80, 8
                                    store notrap aligned v81, v0+4
                                    return
}

Steps to Reproduce

seems to only happen when running on release..?

Expected Results

should not panic

Actual Results

panics

Versions and Environment

Cranelift version or commit: 0.129

Operating system: Linux 6.19.2-2-cachyos

Architecture: x86_64 (Ryzen 5 5600)


Last updated: Mar 23 2026 at 16:19 UTC