Commit 31bee964 by Richard Biener Committed by Richard Biener

re PR tree-optimization/82436 (465.tonto ICE in vect_get_slp_vect_defs, at tree-vect-slp.c:3410)

2017-10-06  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/82436
	* tree-vect-slp.c (vect_supported_load_permutation_p): More
	conservatively choose the vectorization factor when checking
	whether we can perform the required load permutation.
	(vect_transform_slp_perm_load): Assert when we may not fail.

	* gcc.dg/vect/pr82436.c: New testcase.

From-SVN: r253473
parent 604d1669
2017-10-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/82436
* tree-vect-slp.c (vect_supported_load_permutation_p): More
conservatively choose the vectorization factor when checking
whether we can perform the required load permutation.
(vect_transform_slp_perm_load): Assert when we may not fail.
2017-10-05 Segher Boessenkool <segher@kernel.crashing.org> 2017-10-05 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Correct error * config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Correct error
2017-10-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/82436
* gcc.dg/vect/pr82436.c: New testcase.
2017-10-05 Bernd Edlinger <bernd.edlinger@hotmail.de> 2017-10-05 Bernd Edlinger <bernd.edlinger@hotmail.de>
* gcc.dg/Wincompatible-pointer-types-1.c: New test. * gcc.dg/Wincompatible-pointer-types-1.c: New test.
......
/* { dg-do compile } */
/* { dg-additional-options "-Ofast -fno-tree-scev-cprop" } */
/* { dg-additional-options "-mavx2" { target { x86_64-*-* i?86-*-* } } } */
struct reflection_type
{
int h;
int k;
int l;
double f_exp;
double f_sigma;
_Complex double f_calc;
double f_pred;
double i_exp;
double i_sigma;
double i_pred;
};
double y, w;
int foo (struct reflection_type *r, int n, unsigned s)
{
int i;
y = 0;
w = 0;
for (i = 1; i < n; ++i)
{
struct reflection_type *x = &r[i*s];
double fpred = x->f_pred;
double fexp = x->f_exp;
double tem = (fpred - fexp);
y += __builtin_fabs (tem / x->f_sigma);
w += __builtin_fabs (tem / fexp);
}
return i;
}
...@@ -1629,14 +1629,20 @@ vect_supported_load_permutation_p (slp_instance slp_instn) ...@@ -1629,14 +1629,20 @@ vect_supported_load_permutation_p (slp_instance slp_instn)
return true; return true;
} }
/* For loop vectorization verify we can generate the permutation. */ /* For loop vectorization verify we can generate the permutation. Be
conservative about the vectorization factor, there are permutations
that will use three vector inputs only starting from a specific factor
and the vectorization factor is not yet final.
??? The SLP instance unrolling factor might not be the maximum one. */
unsigned n_perms; unsigned n_perms;
unsigned test_vf
= least_common_multiple (SLP_INSTANCE_UNROLLING_FACTOR (slp_instn),
LOOP_VINFO_VECT_FACTOR
(STMT_VINFO_LOOP_VINFO (vinfo_for_stmt (stmt))));
FOR_EACH_VEC_ELT (SLP_INSTANCE_LOADS (slp_instn), i, node) FOR_EACH_VEC_ELT (SLP_INSTANCE_LOADS (slp_instn), i, node)
if (node->load_permutation.exists () if (node->load_permutation.exists ()
&& !vect_transform_slp_perm_load && !vect_transform_slp_perm_load (node, vNULL, NULL, test_vf,
(node, vNULL, NULL, slp_instn, true, &n_perms))
SLP_INSTANCE_UNROLLING_FACTOR (slp_instn), slp_instn, true,
&n_perms))
return false; return false;
return true; return true;
...@@ -3613,6 +3619,7 @@ vect_transform_slp_perm_load (slp_tree node, vec<tree> dr_chain, ...@@ -3613,6 +3619,7 @@ vect_transform_slp_perm_load (slp_tree node, vec<tree> dr_chain,
dump_gimple_stmt (MSG_MISSED_OPTIMIZATION, TDF_SLIM, dump_gimple_stmt (MSG_MISSED_OPTIMIZATION, TDF_SLIM,
stmt, 0); stmt, 0);
} }
gcc_assert (analyze_only);
return false; return false;
} }
...@@ -3636,6 +3643,7 @@ vect_transform_slp_perm_load (slp_tree node, vec<tree> dr_chain, ...@@ -3636,6 +3643,7 @@ vect_transform_slp_perm_load (slp_tree node, vec<tree> dr_chain,
dump_printf (MSG_MISSED_OPTIMIZATION, "%d ", mask[i]); dump_printf (MSG_MISSED_OPTIMIZATION, "%d ", mask[i]);
dump_printf (MSG_MISSED_OPTIMIZATION, "}\n"); dump_printf (MSG_MISSED_OPTIMIZATION, "}\n");
} }
gcc_assert (analyze_only);
return false; return false;
} }
......
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