aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-data-refs.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-07-03 10:25:22 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-07-03 10:25:22 +0200
commita7b3509eb6aa51d696be5edba6f4e451ceff03a0 (patch)
tree18fdfea0a32e9d6ffd8e5b7473c2100bf0e930ec /gcc/tree-vect-data-refs.c
parent49d0d5fc6f893804061894202596933e0c396705 (diff)
downloadgcc-a7b3509eb6aa51d696be5edba6f4e451ceff03a0.zip
gcc-a7b3509eb6aa51d696be5edba6f4e451ceff03a0.tar.gz
gcc-a7b3509eb6aa51d696be5edba6f4e451ceff03a0.tar.bz2
re PR tree-optimization/91033 (ICE in vect_analyze_loop, at tree-vect-loop.c:2416)
PR tree-optimization/91033 * tree-vectorizer.h (vect_mark_stmts_to_be_vectorized, vect_analyze_data_refs): Add bool * arguments. * tree-vect-data-refs.c (vect_analyze_data_refs): Add fatal argument, if failure is due to scatter/gather, set *fatal to false if non-NULL. * tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): Likewise. * tree-vect-loop.c (vect_analyze_loop_2): Adjust vect_mark_stmts_to_be_vectorized and vect_analyze_data_refs callers. * tree-vect-slp.c (vect_slp_analyze_bb_1): Adjust vect_analyze_data_refs caller. * gcc.target/i386/pr91033.c: New test. From-SVN: r272989
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r--gcc/tree-vect-data-refs.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index 20c8815..cf9cee5 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -4160,7 +4160,7 @@ vect_find_stmt_data_reference (loop_p loop, gimple *stmt,
*/
opt_result
-vect_analyze_data_refs (vec_info *vinfo, poly_uint64 *min_vf)
+vect_analyze_data_refs (vec_info *vinfo, poly_uint64 *min_vf, bool *fatal)
{
struct loop *loop = NULL;
unsigned int i;
@@ -4386,12 +4386,16 @@ vect_analyze_data_refs (vec_info *vinfo, poly_uint64 *min_vf)
as_a <loop_vec_info> (vinfo),
&gs_info)
|| !get_vectype_for_scalar_type (TREE_TYPE (gs_info.offset)))
- return opt_result::failure_at
- (stmt_info->stmt,
- (gatherscatter == GATHER) ?
- "not vectorized: not suitable for gather load %G" :
- "not vectorized: not suitable for scatter store %G",
- stmt_info->stmt);
+ {
+ if (fatal)
+ *fatal = false;
+ return opt_result::failure_at
+ (stmt_info->stmt,
+ (gatherscatter == GATHER)
+ ? "not vectorized: not suitable for gather load %G"
+ : "not vectorized: not suitable for scatter store %G",
+ stmt_info->stmt);
+ }
STMT_VINFO_GATHER_SCATTER_P (stmt_info) = gatherscatter;
}
}