Skip to content

Commit

Permalink
[testsuite] [arm] [vect] adjust mve-vshr test [PR113281]
Browse files Browse the repository at this point in the history
The test was too optimistic, alas.  We used to vectorize shifts by
clamping the shift counts below the bit width of the types (e.g. at 15
for 16-bit vector elements), but (uint16_t)32768 >> (uint16_t)16 is
well defined (because of promotion to 32-bit int) and must yield 0,
not 1 (as before the fix).

Unfortunately, in the gimple model of vector units, such large shift
counts wouldn't be well-defined, so we won't vectorize such shifts any
more, unless we can tell they're in range or undefined.

So the test that expected the vectorization we no longer performed
needs to be adjusted.  Instead of nobbling the test, Richard Earnshaw
suggested annotating the test with the expected ranges so as to enable
the optimization, and Christophe Lyon suggested a further
simplification.


Co-Authored-By: Richard Earnshaw <Richard.Earnshaw@arm.com>

for  gcc/testsuite/ChangeLog

	PR tree-optimization/113281
	* gcc.target/arm/simd/mve-vshr.c: Add expected ranges.
  • Loading branch information
Alexandre Oliva authored and Alexandre Oliva committed Jun 26, 2024
1 parent aac00d0 commit 54d2339
Showing 1 changed file with 2 additions and 0 deletions.
2 changes: 2 additions & 0 deletions gcc/testsuite/gcc.target/arm/simd/mve-vshr.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
void test_ ## NAME ##_ ## SIGN ## BITS ## x ## NB (TYPE##BITS##_t * __restrict__ dest, TYPE##BITS##_t *a, TYPE##BITS##_t *b) { \
int i; \
for (i=0; i<NB; i++) { \
if ((unsigned)b[i] >= (unsigned)(BITS)) \
__builtin_unreachable(); \
dest[i] = a[i] OP b[i]; \
} \
}
Expand Down

0 comments on commit 54d2339

Please sign in to comment.