Stream: git-wasmtime

Topic: wasmtime / issue #12197 Cranelift: Tracking Issue: Missin...


view this post on Zulip Wasmtime GitHub notifications bot (Dec 22 2025 at 07:00):

abc767234318 opened issue #12197:

As suggested in #12171 , I am aggregating the missing lowering rules and internal errors I've encountered into a single tracking issue. I will update this list as I discover more cases.

X86_64

aarch64

S390x

view this post on Zulip Wasmtime GitHub notifications bot (Dec 22 2025 at 07:00):

abc767234318 added the bug label to Issue #12197.

view this post on Zulip Wasmtime GitHub notifications bot (Dec 22 2025 at 07:00):

abc767234318 added the cranelift label to Issue #12197.

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

alexcrichton added the cranelift:area:aarch64 label to Issue #12197.

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

alexcrichton added the cranelift:area:x86 label to Issue #12197.

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

alexcrichton added the cranelift:area:s390x label to Issue #12197.

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

jgraef commented on issue #12197:

insertlane on i32x2 returns an error as well:

should be implemented in ISLE: inst = `v5 = insertlane.i32x2 v4, v3, 1`, type = `Some(types::I32X2)`

<details>
<summary>Click to view reproduction (.clif)</summary>

function %main() -> f32x4, i32x2 system_v {
    ss0 = explicit_slot 4, align = 4, key = 0
    ss1 = explicit_slot 4, align = 4, key = 1

block0:
    v0 = iconst.i32 1
    stack_store v0, ss0  ; v0 = 1
    v1 = iconst.i32 2
    stack_store v1, ss1  ; v1 = 2
    v2 = stack_load.i32 ss0
    v3 = stack_load.i32 ss1
    v4 = splat.i32x2 v2
    v5 = insertlane v4, v3, 1
    v6 = f32const 0.0
    v7 = splat.f32x4 v6  ; v6 = 0.0
    return v7, v5
}

</details>

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

jgraef edited a comment on issue #12197:

insertlane on i32x2 returns an error as well:

should be implemented in ISLE: inst = `v5 = insertlane.i32x2 v4, v3, 1`, type = `Some(types::I32X2)`

<details>
<summary>Click to view reproduction (.clif)</summary>

function %main() -> f32x4, i32x2 system_v {
    ss0 = explicit_slot 4, align = 4, key = 0
    ss1 = explicit_slot 4, align = 4, key = 1

block0:
    v0 = iconst.i32 1
    stack_store v0, ss0  ; v0 = 1
    v1 = iconst.i32 2
    stack_store v1, ss1  ; v1 = 2
    v2 = stack_load.i32 ss0
    v3 = stack_load.i32 ss1
    v4 = splat.i32x2 v2
    v5 = insertlane v4, v3, 1
    v6 = f32const 0.0
    v7 = splat.f32x4 v6  ; v6 = 0.0
    return v7, v5
}

</details>

Edit: error occurs when compiling to x86_64

view this post on Zulip Wasmtime GitHub notifications bot (Dec 23 2025 at 19:39):

theotherjimmy commented on issue #12197:

I'll handle the s390x panic. Thanks for the reproducer.

view this post on Zulip Wasmtime GitHub notifications bot (Dec 23 2025 at 20:01):

theotherjimmy edited a comment on issue #12197:

I'll handle the s390x panic. Thanks for the reproducer. I noticed that the reproducer actually does not use v10 at all, using v11 only


It looks like this affects all binary operations on floating point numbers. I was able to get almost the same failure with the following combinations:

view this post on Zulip Wasmtime GitHub notifications bot (Dec 23 2025 at 20:01):

theotherjimmy edited a comment on issue #12197:

I'll handle the s390x panic. Thanks for the reproducer. I noticed that the reproducer actually does not use v10 at all, using v11 only


It looks like this affects all binary operations on floating point numbers. I was able to get almost the same failure with the following combinations:

view this post on Zulip Wasmtime GitHub notifications bot (Dec 23 2025 at 20:01):

theotherjimmy edited a comment on issue #12197:

I'll handle the s390x panic. Thanks for the reproducer. I noticed that the reproducer actually does not use v10 at all, using v11 only


It looks like this affects all binary operations on floating point numbers. I was able to get almost the same failure with the following combinations:

I think this will be a bit more of a lift, since these operations require moving the floating point numbers into GPRs, then moving the result back.

view this post on Zulip Wasmtime GitHub notifications bot (Dec 23 2025 at 20:04):

theotherjimmy edited a comment on issue #12197:

I'll handle the s390x panic. Thanks for the reproducer. I noticed that the reproducer actually does not use v10 at all, using v11 only


It looks like this affects all binary operations on floating point numbers. I was able to get almost the same failure with the following combinations:

That implies that the following reproducer would be simpler:

function %bnot_f32() -> f32 fast {
block0:
  v10 = f32const -0x1.fffffep127
  v21 = bnot v10
  return  v21
}

I think this will be a bit more of a lift, since these operations require moving the floating point numbers into GPRs, then moving the result back.

view this post on Zulip Wasmtime GitHub notifications bot (Dec 23 2025 at 20:04):

theotherjimmy edited a comment on issue #12197:

I'll handle the s390x panic. Thanks for the reproducer. I noticed that the reproducer actually does not use v10 at all, using v11 only


It looks like this affects all binary operations on floating point numbers. I was able to get almost the same failure with the following combinations:

That implies that the following reproducer would be simpler:

function %bnot_f32(f32) -> f32 fast {
block0(v0: f32):
  v1 = bnot v0
  return  v1
}

I think this will be a bit more of a lift, since these operations require moving the floating point numbers into GPRs, then moving the result back.

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

theotherjimmy edited a comment on issue #12197:

I'll handle the s390x panic. Thanks for the reproducer. I noticed that the reproducer actually does not use v10 at all, using v11 only


It looks like this affects all binary operations on floating point numbers. I was able to get almost the same failure with the following combinations:

That implies that the following reproducer would be simpler:

function %bnot_f32(f32) -> f32 fast {
block0(v0: f32):
  v1 = bnot v0
  return  v1
}

I think this will be a bit more of a lift, since these operations require moving the floating point numbers into GPRs, then moving the result back. Alternatively, it's possible to use the lower 16 vector register aliases with vector bit operations to avoid the moves. Making use of the floating point-vector register overlay would require that the register allocator to understand that this happens. Is this the case?

view this post on Zulip Wasmtime GitHub notifications bot (Dec 27 2025 at 13:34):

abc767234318 edited issue #12197:

As suggested in #12171 , I am aggregating the missing lowering rules and internal errors I've encountered into a single tracking issue. I will update this list as I discover more cases.

X86_64

aarch64

S390x

view this post on Zulip Wasmtime GitHub notifications bot (Jan 08 2026 at 13:16):

theotherjimmy commented on issue #12197:

s390x issue fixed in #12232 , can we remove the s390x tag? or is there something else needed?

view this post on Zulip Wasmtime GitHub notifications bot (Jan 08 2026 at 15:25):

alexcrichton removed the cranelift:area:s390x label from Issue #12197.


Last updated: Jan 09 2026 at 13:15 UTC