diff options
author | Richard Biener <rguenther@suse.de> | 2013-04-02 13:31:05 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2013-04-02 13:31:05 +0000 |
commit | 90eb75f26e6214dc4e673526952932674e901d8c (patch) | |
tree | d61f3dd52df8a8b6cfa4d150c4f699a8905e0dc3 /gcc/tree-vect-data-refs.c | |
parent | 8034bcbee6a8de54d29e70aa15671ff9ea297493 (diff) | |
download | gcc-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.c | 34 |
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, |