Stream: git-wasmtime

Topic: wasmtime / issue #4734 Cranelift: x64 backend is missing ...


view this post on Zulip Wasmtime GitHub notifications bot (Aug 18 2022 at 17:53):

elliottt opened issue #4734:

.clif Test Case

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = snarrow v0, v1
  return v2
}

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = unarrow v0, v1
  return v2
}

Steps to Reproduce

Compile the examples with clif-util compile --target=x86_64.

Expected Results

The examples should generate code.

Actual Results

There's a panic in the x64 code generator, as these case for i64x2 input is not implemented for snarrow and unarrow.

% ./target/debug/clif-util compile -D --target=x86_64 test.clif
thread 'main' panicked at 'internal error: entered unreachable code', cranelift/codegen/src/isa/x64/lower.rs:749:33
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Versions and Environment

Cranelift version or commit: 7d9a359f51fca167dce488a1039dded7096c7ac5

Operating system: Linux

Architecture: x86_64

view this post on Zulip Wasmtime GitHub notifications bot (Aug 18 2022 at 17:53):

elliottt labeled issue #4734:

.clif Test Case

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = snarrow v0, v1
  return v2
}

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = unarrow v0, v1
  return v2
}

Steps to Reproduce

Compile the examples with clif-util compile --target=x86_64.

Expected Results

The examples should generate code.

Actual Results

There's a panic in the x64 code generator, as these case for i64x2 input is not implemented for snarrow and unarrow.

% ./target/debug/clif-util compile -D --target=x86_64 test.clif
thread 'main' panicked at 'internal error: entered unreachable code', cranelift/codegen/src/isa/x64/lower.rs:749:33
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Versions and Environment

Cranelift version or commit: 7d9a359f51fca167dce488a1039dded7096c7ac5

Operating system: Linux

Architecture: x86_64

view this post on Zulip Wasmtime GitHub notifications bot (Aug 18 2022 at 17:53):

elliottt labeled issue #4734:

.clif Test Case

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = snarrow v0, v1
  return v2
}

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = unarrow v0, v1
  return v2
}

Steps to Reproduce

Compile the examples with clif-util compile --target=x86_64.

Expected Results

The examples should generate code.

Actual Results

There's a panic in the x64 code generator, as these case for i64x2 input is not implemented for snarrow and unarrow.

% ./target/debug/clif-util compile -D --target=x86_64 test.clif
thread 'main' panicked at 'internal error: entered unreachable code', cranelift/codegen/src/isa/x64/lower.rs:749:33
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Versions and Environment

Cranelift version or commit: 7d9a359f51fca167dce488a1039dded7096c7ac5

Operating system: Linux

Architecture: x86_64

view this post on Zulip Wasmtime GitHub notifications bot (Aug 19 2022 at 02:16):

abrown commented on issue #4734:

Is this because those types are not used by the WebAssembly SIMD instructions for narrowing?

view this post on Zulip Wasmtime GitHub notifications bot (Aug 19 2022 at 02:23):

cfallin commented on issue #4734:

Yep, it appears the ops are only used in particular combinations by cranelift-wasm and those are the combinations the x64 backend supports. That's OK for now (we're keeping status quo as we migrate lowerings) but we definitely want to support the general case in due time, I think.

view this post on Zulip Wasmtime GitHub notifications bot (Aug 26 2022 at 20:45):

elliottt edited issue #4734:

.clif Test Case

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = snarrow v0, v1
  return v2
}

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = unarrow v0, v1
  return v2
}

Steps to Reproduce

Compile the examples with clif-util compile --target=x86_64.

Expected Results

The examples should generate code.

Actual Results

There's a panic in the x64 code generator, as these case for i64x2 input is not implemented for snarrow and unarrow.

https://github.com/bytecodealliance/wasmtime/blob/ca6d648e37c80cb13e5027cc746ec0d2e4bd64d1/cranelift/codegen/src/isa/x64/lower.rs#L619

Versions and Environment

Cranelift version or commit: 7d9a359f51fca167dce488a1039dded7096c7ac5

Operating system: Linux

Architecture: x86_64

view this post on Zulip Wasmtime GitHub notifications bot (Aug 26 2022 at 20:46):

elliottt edited issue #4734:

.clif Test Case

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = snarrow v0, v1
  return v2
}

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = unarrow v0, v1
  return v2
}

Steps to Reproduce

Compile the examples with clif-util compile --target=x86_64.

Expected Results

The examples should generate code.

Actual Results

There's a panic in the x64 code generator, as these case for i64x2 input is not implemented for snarrow and unarrow.

https://github.com/bytecodealliance/wasmtime/blob/ca6d648e37c80cb13e5027cc746ec0d2e4bd64d1/cranelift/codegen/src/isa/x64/lower.rs#L619

Versions and Environment

Cranelift version or commit: ca6d648e37c80cb13e5027cc746ec0d2e4bd64d1

Operating system: Linux

Architecture: x86_64

view this post on Zulip Wasmtime GitHub notifications bot (Aug 26 2022 at 20:50):

elliottt edited issue #4734:

.clif Test Case

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = snarrow v0, v1
  return v2
}

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = unarrow v0, v1
  return v2
}

Steps to Reproduce

Compile the examples with clif-util compile --target=x86_64.

Expected Results

The examples should generate code.

Actual Results

There's a panic in the x64 code generator, as these case for i64x2 input is not implemented for snarrow and unarrow. The following program will compile successfully, as there's a special case for the combination of snarrow and fcvt_to_sint_sat:

function %f3(f64x2) -> i32x4 {
block0(v0: f64x2):
  v1 = fcvt_to_sint_sat.i64x2 v0
  v2 = vconst.i64x2 0x00
  v3 = snarrow v1, v2
  return v3
}

https://github.com/bytecodealliance/wasmtime/blob/ca6d648e37c80cb13e5027cc746ec0d2e4bd64d1/cranelift/codegen/src/isa/x64/lower.isle#L3275-L3299

Versions and Environment

Cranelift version or commit: ca6d648e37c80cb13e5027cc746ec0d2e4bd64d1

Operating system: Linux

Architecture: x86_64

view this post on Zulip Wasmtime GitHub notifications bot (Sep 26 2022 at 13:04):

akirilov-arm labeled issue #4734:

.clif Test Case

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = snarrow v0, v1
  return v2
}

function %f3(i64x2, i64x2) -> i32x4 {
block0(v0: i64x2, v1: i64x2):
  v2 = unarrow v0, v1
  return v2
}

Steps to Reproduce

Compile the examples with clif-util compile --target=x86_64.

Expected Results

The examples should generate code.

Actual Results

There's a panic in the x64 code generator, as these case for i64x2 input is not implemented for snarrow and unarrow. The following program will compile successfully, as there's a special case for the combination of snarrow and fcvt_to_sint_sat:

function %f3(f64x2) -> i32x4 {
block0(v0: f64x2):
  v1 = fcvt_to_sint_sat.i64x2 v0
  v2 = vconst.i64x2 0x00
  v3 = snarrow v1, v2
  return v3
}

https://github.com/bytecodealliance/wasmtime/blob/ca6d648e37c80cb13e5027cc746ec0d2e4bd64d1/cranelift/codegen/src/isa/x64/lower.isle#L3275-L3299

Versions and Environment

Cranelift version or commit: ca6d648e37c80cb13e5027cc746ec0d2e4bd64d1

Operating system: Linux

Architecture: x86_64


Last updated: Oct 23 2024 at 20:03 UTC