vxpm opened issue #12671:
.clifTest Casenot 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)
vxpm added the cranelift label to Issue #12671.
vxpm added the bug label to Issue #12671.
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?
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!
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!
vxpm closed issue #12671:
.clifTest Casenot 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