aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-data-refs.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2013-04-02 13:31:05 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2013-04-02 13:31:05 +0000
commit90eb75f26e6214dc4e673526952932674e901d8c (patch)
treed61f3dd52df8a8b6cfa4d150c4f699a8905e0dc3 /gcc/tree-vect-data-refs.c
parent8034bcbee6a8de54d29e70aa15671ff9ea297493 (diff)
downloadgcc-90eb75f26e6214dc4e673526952932674e901d8c.zip
gcc-90eb75f26e6214dc4e673526952932674e901d8c.tar.gz
gcc-90eb75f26e6214dc4e673526952932674e901d8c.tar.bz2
re PR tree-optimization/56778 (ICE on several benchmarks after r196775.)
2013-04-02 Richard Biener <rguenther@suse.de> PR tree-optimization/56778 * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Runtime alias tests are not supported for gather loads. * tree-vect-loop-manip.c (vect_loop_versioning): Insert stmts referenced from SSA operands before updating SSA form. * gcc.dg/torture/pr56778.c: New testcase. From-SVN: r197355
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r--gcc/tree-vect-data-refs.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index 188581f..4ef9ba8 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -280,6 +280,23 @@ vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr,
/* Unknown data dependence. */
if (DDR_ARE_DEPENDENT (ddr) == chrec_dont_know)
{
+ if (STMT_VINFO_GATHER_P (stmtinfo_a)
+ || STMT_VINFO_GATHER_P (stmtinfo_b))
+ {
+ if (dump_enabled_p ())
+ {
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ "versioning for alias not supported for: "
+ "can't determine dependence between ");
+ dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM,
+ DR_REF (dra));
+ dump_printf (MSG_MISSED_OPTIMIZATION, " and ");
+ dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM,
+ DR_REF (drb));
+ }
+ return false;
+ }
+
if (dump_enabled_p ())
{
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
@@ -299,6 +316,23 @@ vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr,
/* Known data dependence. */
if (DDR_NUM_DIST_VECTS (ddr) == 0)
{
+ if (STMT_VINFO_GATHER_P (stmtinfo_a)
+ || STMT_VINFO_GATHER_P (stmtinfo_b))
+ {
+ if (dump_enabled_p ())
+ {
+ dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+ "versioning for alias not supported for: "
+ "bad dist vector for ");
+ dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM,
+ DR_REF (dra));
+ dump_printf (MSG_MISSED_OPTIMIZATION, " and ");
+ dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM,
+ DR_REF (drb));
+ }
+ return false;
+ }
+
if (dump_enabled_p ())
{
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,