From 42b230eeb495f068568cc340283c098a3d3df1a7 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 12 Dec 2011 20:43:06 +0100 Subject: [PATCH] backport: re PR tree-optimization/51485 (ICE in vectorizable_assignment) Backported from mainline 2011-12-11 Jakub Jelinek PR tree-optimization/51485 * tree-vect-data-refs.c (vect_analyze_data_refs): Give up on DRs in call stmts. * g++.dg/vect/pr51485.cc: New test. From-SVN: r182259 --- gcc/ChangeLog | 9 +++++++++ gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/g++.dg/vect/pr51485.cc | 14 ++++++++++++++ gcc/tree-vect-data-refs.c | 10 ++++++++++ 4 files changed, 41 insertions(+) create mode 100644 gcc/testsuite/g++.dg/vect/pr51485.cc diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0c1f9975aea8..b1b83aca5d25 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2011-12-12 Jakub Jelinek + + Backported from mainline + 2011-12-11 Jakub Jelinek + + PR tree-optimization/51485 + * tree-vect-data-refs.c (vect_analyze_data_refs): Give up on + DRs in call stmts. + 2011-12-12 Eric Botcazou PR tree-optimization/50569 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bdca336eb47d..869c3cd31220 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2011-12-12 Jakub Jelinek + + Backported from mainline + 2011-12-11 Jakub Jelinek + + PR tree-optimization/51485 + * g++.dg/vect/pr51485.cc: New test. + 2011-12-12 Eric Botcazou * gcc.c-torture/execute/20111212-1.c: New test. diff --git a/gcc/testsuite/g++.dg/vect/pr51485.cc b/gcc/testsuite/g++.dg/vect/pr51485.cc new file mode 100644 index 000000000000..d57d7596d0e2 --- /dev/null +++ b/gcc/testsuite/g++.dg/vect/pr51485.cc @@ -0,0 +1,14 @@ +/* { dg-do compile } */ + +struct A { A (); unsigned int a; }; +double bar (A a) throw () __attribute__((pure)); + +void +foo (unsigned int x, double *y, A *z) +{ + unsigned int i; + for (i = 0; i < x; i++) + y[i] = bar (z[i]); +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index a45ad40fe2a7..d49393f1e435 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -2631,6 +2631,16 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo, return false; } + if (is_gimple_call (stmt)) + { + if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS)) + { + fprintf (vect_dump, "not vectorized: dr in a call "); + print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM); + } + return false; + } + /* Update DR field in stmt_vec_info struct. */ /* If the dataref is in an inner-loop of the loop that is considered for -- 2.47.2