The method context.convert_vector, added to libgccjit for simd_cast,
appears to give the correct behavior for simd_as. Instead of
special-casing simd_as, re-use simd_cast's impl for simd_as.
Signed-off-by: Andy Sadler <andrewsadler122@gmail.com>
Implements the following simd reduction intrinsics:
- simd_reduce_add_ordered
- simd_reduce_mul_ordered
- simd_reduce_min_nanless
- simd_reduce_max_nanless
- simd_reduce_xor
- simd_reduce_any
- simd_reduce_all
Also fixes the ordering of simd_reduce_min and simd_reduce_max,
which were tested to be flipped.
Both simd_reduce_min_nanless and simd_reduce_max_nanless are identical
to their non-nanless variants for the time being. An attempt was made
at a more optimal codegen solution based on vector_reduce_op. However,
this approach ran into masking issues for floating-point vector types,
which appears to be broken for the same reason that comparison
operations such as simd_lt are broken for floating-point vector types.
More investigation is required, however, to determine a root cause and
appropriate fix.
This should be enough to pass the generic-reduction-pass.rs ui tests
with the 'master' feature enabled.
Signed-off-by: Andy Sadler <andrewsadler122@gmail.com>