diff options
author | Richard Biener <rguenther@suse.de> | 2019-05-06 13:40:00 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-05-06 13:40:00 +0000 |
commit | 898758504fa87d9f5e72c2c8b32139b413276a10 (patch) | |
tree | 1d6c3fa6b157d5eb3e466ec951d2ebb411bc400b /gcc | |
parent | a37aba10107504daad790b0595dd4ef73ad59a6f (diff) | |
download | gcc-898758504fa87d9f5e72c2c8b32139b413276a10.zip gcc-898758504fa87d9f5e72c2c8b32139b413276a10.tar.gz gcc-898758504fa87d9f5e72c2c8b32139b413276a10.tar.bz2 |
re PR tree-optimization/90358 (526.blender_r train run does not finish after r270847 on znver1)
2019-05-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/90358
* tree-vect-stmts.c (get_group_load_store_type): Properly
detect unused upper half of load.
(vectorizable_load): Likewise.
* gcc.target/i386/pr90358.c: New testcase.
From-SVN: r270911
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr90358.c | 35 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 4 |
4 files changed, 50 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7661237..432b8c1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2019-05-06 Richard Biener <rguenther@suse.de> + PR tree-optimization/90358 + * tree-vect-stmts.c (get_group_load_store_type): Properly + detect unused upper half of load. + (vectorizable_load): Likewise. + +2019-05-06 Richard Biener <rguenther@suse.de> + PR tree-optimization/88828 * tree-ssa-forwprop.c (get_bit_field_ref_def): Split out from... (simplify_vector_constructor): ...here. Handle constants in diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ec1ec51..679ac80 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2019-05-06 Richard Biener <rguenther@suse.de> + PR tree-optimization/90358 + * gcc.target/i386/pr90358.c: New testcase. + +2019-05-06 Richard Biener <rguenther@suse.de> + PR tree-optimization/88828 * gcc.target/i386/pr88828-0.c: New testcase. diff --git a/gcc/testsuite/gcc.target/i386/pr90358.c b/gcc/testsuite/gcc.target/i386/pr90358.c new file mode 100644 index 0000000..4894fdb --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr90358.c @@ -0,0 +1,35 @@ +/* PR target/90358 */ +/* { dg-do run { target { sse4_runtime } } } */ +/* { dg-options "-O3 -msse4" } */ + +struct s { unsigned int a, b, c; }; + +void __attribute__ ((noipa)) +foo (struct s *restrict s1, struct s *restrict s2, int n) +{ + for (int i = 0; i < n; ++i) + { + s1[i].b = s2[i].b; + s1[i].c = s2[i].c; + s2[i].c = 0; + } +} + +#define N 12 + +int +main () +{ + struct s s1[N], s2[N]; + for (unsigned int j = 0; j < N; ++j) + { + s2[j].a = j * 5; + s2[j].b = j * 5 + 2; + s2[j].c = j * 5 + 4; + } + foo (s1, s2, N); + for (unsigned int j = 0; j < N; ++j) + if (s1[j].b != j * 5 + 2) + __builtin_abort (); + return 0; +} diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 247d435..98e6df7 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -2273,6 +2273,7 @@ get_group_load_store_type (stmt_vec_info stmt_info, tree vectype, bool slp, == dr_aligned || alignment_support_scheme == dr_unaligned_supported) && known_eq (nunits, (group_size - gap) * 2) + && known_eq (nunits, group_size) && mode_for_vector (elmode, (group_size - gap)).exists (&vmode) && VECTOR_MODE_P (vmode) && targetm.vector_mode_supported_p (vmode) @@ -8550,7 +8551,8 @@ vectorizable_load (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi, && DR_GROUP_GAP (first_stmt_info) != 0 && known_eq (nunits, (group_size - - DR_GROUP_GAP (first_stmt_info)) * 2)) + - DR_GROUP_GAP (first_stmt_info)) * 2) + && known_eq (nunits, group_size)) ltype = build_vector_type (TREE_TYPE (vectype), (group_size - DR_GROUP_GAP |