diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-12-11 22:01:00 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-12-11 22:01:00 +0100 |
commit | 9c2390853e656fa61d6af8919e9718f3eb790060 (patch) | |
tree | cdb0adbe66fc88a9ace1d03bba0ff77d7399c28d /gcc/tree-vect-data-refs.c | |
parent | fba5ace06b2af2a403a489fa2bb490e6cd3137cc (diff) | |
download | gcc-9c2390853e656fa61d6af8919e9718f3eb790060.zip gcc-9c2390853e656fa61d6af8919e9718f3eb790060.tar.gz gcc-9c2390853e656fa61d6af8919e9718f3eb790060.tar.bz2 |
re PR tree-optimization/51485 (ICE in vectorizable_assignment)
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: r182212
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r-- | gcc/tree-vect-data-refs.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index 8111bdc..6a85b7b 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -2896,6 +2896,26 @@ 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); + } + + if (bb_vinfo) + { + STMT_VINFO_VECTORIZABLE (stmt_info) = false; + stop_bb_analysis = true; + continue; + } + + if (gather) + free_data_ref (dr); + 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 |