Skip to content

Cranelift: SIMD ineg crashes the interpreter #6827

@afonso360

Description

@afonso360

👋 Hey,

.clif Test Case

test interpret

function %simd_ineg_i64x2(i64x2) -> i64x2 {
block0(v0: i64x2):
    v1 = ineg v0
    return v1
}
; run: %simd_ineg_i64x2([0 1]) == [0 -1]

Steps to Reproduce

  • cd cranelift
  • cargo run -- test ./the-above.clif

Expected Results

The test to pass!

Actual Results

 ERROR cranelift_filetests::concurrent > FAIL: interpret
FAIL ./lmao.clif: interpret

Caused by:
    unexpected trap: StepError(ValueError(InvalidType(Integer, types::I64X2)))
1 tests
Error: 1 failure

It looks like the ineg instruction in the interpreter is implemented for scalar values but not for SIMD!

Versions and Environment

Cranelift version or commit: main

Operating system: Linux

Architecture: X86_64 (but it could be any really!)

Extra Info

I would suspect that this goes wrong in DataValueExt::int(0, ctrl_ty), that operation seems to not be ready to produce SIMD values. We could change that and it might work!

If anyone needs help working on this let me know!

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIncorrect behavior in the current implementation that needs fixingcraneliftIssues related to the Cranelift code generatorcranelift:E-easyIssues suitable for newcomers to investigate, including Rust newcomers!good first issueIssues that are good for new contributors to tackle!

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions