From: Jakub Jelinek Date: Fri, 18 Sep 2020 13:05:53 +0000 (+0200) Subject: testsuite: add another test for the rotate vectorization miscompilation X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3d3fe967b0961cb59f5df03ae2a55d83dc4bbd34;p=gcc.git testsuite: add another test for the rotate vectorization miscompilation This time with short and char where the used mask used to be larger than it should have been. 2020-09-18 Jakub Jelinek PR tree-optimization/97081 * gcc.dg/vect/pr97081-2.c: New test. --- diff --git a/gcc/testsuite/gcc.dg/vect/pr97081-2.c b/gcc/testsuite/gcc.dg/vect/pr97081-2.c new file mode 100644 index 00000000000..98ad3c3fe17 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr97081-2.c @@ -0,0 +1,32 @@ +/* PR tree-optimization/97081 */ + +#include "tree-vect.h" + +unsigned short s[1024]; +unsigned char c[1024]; + +__attribute__((noipa)) void +foo (int n) +{ + for (int i = 0; i < 1024; i++) + s[i] = (s[i] << n) | (s[i] >> (__SIZEOF_SHORT__ * __CHAR_BIT__ - n)); + for (int i = 0; i < 1024; i++) + c[i] = (c[i] << n) | (c[i] >> (__CHAR_BIT__ - n)); +} + +int +main () +{ + check_vect (); + for (int i = 0; i < 1024; i++) + { + s[i] = i; + c[i] = i; + } + foo (3); + for (int i = 0; i < 1024; i++) + if (s[i] != (unsigned short) ((i << 3) | (i >> (__SIZEOF_SHORT__ * __CHAR_BIT__ - 3))) + || c[i] != (unsigned char) ((((unsigned char) i) << 3) | (((unsigned char) i) >> (__CHAR_BIT__ - 3)))) + __builtin_abort (); + return 0; +}