From 90eb75f26e6214dc4e673526952932674e901d8c Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 2 Apr 2013 13:31:05 +0000 Subject: [PATCH] re PR tree-optimization/56778 (ICE on several benchmarks after r196775.) 2013-04-02 Richard Biener 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 --- gcc/ChangeLog | 8 ++++++ gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gcc.dg/torture/pr56778.c | 15 ++++++++++++ gcc/tree-vect-data-refs.c | 34 ++++++++++++++++++++++++++ gcc/tree-vect-loop-manip.c | 2 +- 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr56778.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f7155c0f4af..d18c6e9b179 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2013-04-02 Richard Biener + + 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. + 2013-04-02 Ian Caulfield Ramana Radhakrishnan diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9b176727464..1a8055d1321 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-04-02 Richard Biener + + PR tree-optimization/56778 + * gcc.dg/torture/pr56778.c: New testcase. + 2013-04-02 Richard Biener PR middle-end/56768 diff --git a/gcc/testsuite/gcc.dg/torture/pr56778.c b/gcc/testsuite/gcc.dg/torture/pr56778.c new file mode 100644 index 00000000000..48068774af3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr56778.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-march=core-avx2" { target x86_64-*-* } } */ + +typedef struct { + float a,b,c; +} S; + +S * arr[100]; + +void bar (float *in[], int n) +{ + int i; + for (i=0; ib; +} diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index 188581f6246..4ef9ba86ef3 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, diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c index b0120a9d4de..a158c62112c 100644 --- a/gcc/tree-vect-loop-manip.c +++ b/gcc/tree-vect-loop-manip.c @@ -2476,11 +2476,11 @@ vect_loop_versioning (loop_vec_info loop_vinfo, /* End loop-exit-fixes after versioning. */ - update_ssa (TODO_update_ssa); if (cond_expr_stmt_list) { cond_exp_gsi = gsi_last_bb (condition_bb); gsi_insert_seq_before (&cond_exp_gsi, cond_expr_stmt_list, GSI_SAME_STMT); } + update_ssa (TODO_update_ssa); } -- 2.30.2