Skip to content

ARM CodeGen issue #9040

@mcourteaux

Description

@mcourteaux

On arm-32-linux, correctness/fuzz_extract_lanes revealed:

Original expr: interleave_vectors(x6((int64)3), min(select(select(ramp(int64(p0), (int64)12, 6) > x6(int64(p2)), ramp(int64(p0), (int64)12, 6), x6((int64)8)) > (x6((int64)6) + x6((int64)10)), select(ramp(int64(p0), (int64)12, 6) > x6(int64(p2)), ramp(int64(p0), (int64)12, 6), x6((int64)8)), ramp((int64)14, (int64)12, 6) - x6(int64(p1))), int64x6((uint64x6)absd(concat_vectors(ramp(int64(p1), (int64)8, 3), ramp((int64)11, (int64)3, 3)), min(ramp((int64)14, (int64)12, 6), ramp((int64)0, (int64)15, 6))))))
Original type: int64x12
Variables: p0=14
p1=4
p2=10
Original values: -8589934592 0 34359738368 0 647672684611436344 153839768 0 1970324836974592 4294967295 661625229473037816 65536 -8589934592
Failed with seed 5792148528566212763

Whereas the correct "original values" should have been (extracted from running this on x86):

Original values: 3 4 3 3 3 10 3 34 3 46 3 57

I have not narrowed this further down than this. It seems the ARM codegen is in pretty bad shape whenever we try to do anything custom, instead of just handing it over to LLVM.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions