Skip to content

Cranelift: internal error: entered unreachable code: no rule matched for term emit_fcmp at src/isa/x64/inst.isle line 3595; should it be partial? #12671

@vxpm

Description

@vxpm

.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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIncorrect behavior in the current implementation that needs fixingcraneliftIssues related to the Cranelift code generator

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions