diff options
author | Richard Biener <rguenther@suse.de> | 2023-07-03 09:17:06 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2023-07-03 10:02:25 +0200 |
commit | 000590c074615cbfffb6ad854a6474e623801460 (patch) | |
tree | e685d82ce050283de2c70be172f6085ff8a3e697 | |
parent | bd7e9856fe5bbeb487797476c4fffb660f63cf4f (diff) | |
download | gcc-000590c074615cbfffb6ad854a6474e623801460.zip gcc-000590c074615cbfffb6ad854a6474e623801460.tar.gz gcc-000590c074615cbfffb6ad854a6474e623801460.tar.bz2 |
tree-optimization/110506 - ICE in pattern recog with TYPE_PRECISION
The following re-orders checks to make sure we check TYPE_PRECISION
on an integral type.
PR tree-optimization/110506
* tree-vect-patterns.cc (vect_recog_rotate_pattern): Re-order
TYPE_PRECISION access with INTEGRAL_TYPE_P check.
* gcc.dg/pr110506-2.c: New testcase.
-rw-r--r-- | gcc/testsuite/gcc.dg/pr110506-2.c | 18 | ||||
-rw-r--r-- | gcc/tree-vect-patterns.cc | 4 |
2 files changed, 20 insertions, 2 deletions
diff --git a/gcc/testsuite/gcc.dg/pr110506-2.c b/gcc/testsuite/gcc.dg/pr110506-2.c new file mode 100644 index 0000000..aabca0fa --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr110506-2.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +typedef unsigned uint32_t; +typedef uint32_t uint32x4 __attribute__((vector_size(16))); +typedef struct { + uint32x4 b, d; +} prng_t; +prng_t prng_rand_128_r_x; +int main_flags; +int main() { + uint32_t ref_crc[] = {7, 3}; + uint32x4 e = (prng_rand_128_r_x.b << 27) + (prng_rand_128_r_x.b >> 32 - 27); + prng_rand_128_r_x.d = e; + if (ref_crc[main_flags]) + __builtin_abort (); + return 0; +} diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index 25f7f8e..de20e9d 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -3726,8 +3726,8 @@ vect_recog_rotate_pattern (vec_info *vinfo, return NULL; if (TREE_CODE (oprnd0) != SSA_NAME - || TYPE_PRECISION (TREE_TYPE (lhs)) != TYPE_PRECISION (type) - || !INTEGRAL_TYPE_P (type)) + || !INTEGRAL_TYPE_P (type) + || TYPE_PRECISION (TREE_TYPE (lhs)) != TYPE_PRECISION (type)) return NULL; stmt_vec_info def_stmt_info; |