-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
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.