Commit 89875850 by Richard Biener Committed by Richard Biener

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
parent a37aba10
2019-05-06 Richard Biener <rguenther@suse.de> 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 PR tree-optimization/88828
* tree-ssa-forwprop.c (get_bit_field_ref_def): Split out from... * tree-ssa-forwprop.c (get_bit_field_ref_def): Split out from...
(simplify_vector_constructor): ...here. Handle constants in (simplify_vector_constructor): ...here. Handle constants in
......
2019-05-06 Richard Biener <rguenther@suse.de> 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 PR tree-optimization/88828
* gcc.target/i386/pr88828-0.c: New testcase. * gcc.target/i386/pr88828-0.c: New testcase.
......
/* 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;
}
...@@ -2273,6 +2273,7 @@ get_group_load_store_type (stmt_vec_info stmt_info, tree vectype, bool slp, ...@@ -2273,6 +2273,7 @@ get_group_load_store_type (stmt_vec_info stmt_info, tree vectype, bool slp,
== dr_aligned == dr_aligned
|| alignment_support_scheme == dr_unaligned_supported) || alignment_support_scheme == dr_unaligned_supported)
&& known_eq (nunits, (group_size - gap) * 2) && known_eq (nunits, (group_size - gap) * 2)
&& known_eq (nunits, group_size)
&& mode_for_vector (elmode, (group_size - gap)).exists (&vmode) && mode_for_vector (elmode, (group_size - gap)).exists (&vmode)
&& VECTOR_MODE_P (vmode) && VECTOR_MODE_P (vmode)
&& targetm.vector_mode_supported_p (vmode) && targetm.vector_mode_supported_p (vmode)
...@@ -8550,7 +8551,8 @@ vectorizable_load (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi, ...@@ -8550,7 +8551,8 @@ vectorizable_load (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi,
&& DR_GROUP_GAP (first_stmt_info) != 0 && DR_GROUP_GAP (first_stmt_info) != 0
&& known_eq (nunits, && known_eq (nunits,
(group_size (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), ltype = build_vector_type (TREE_TYPE (vectype),
(group_size (group_size
- DR_GROUP_GAP - DR_GROUP_GAP
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment