summaryrefslogtreecommitdiff
path: root/gcc/tree-vect-stmts.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2014-02-04 13:08:00 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2014-02-04 13:08:00 +0000
commit4e459157513bf006c7bbf523b2ffdfb6fbeee930 (patch)
treec3cb8d1b945a0700909d02857e6552cf666be347 /gcc/tree-vect-stmts.c
parent5ceeaef0385ef8ca2dea4bc911c2a2e90859b45c (diff)
downloadgcc-4e459157513bf006c7bbf523b2ffdfb6fbeee930.tar.gz
PR tree-optimization/60023
* tree-if-conv.c (predicate_mem_writes): Pass true instead of false to gsi_replace. * tree-vect-stmts.c (vect_finish_stmt_generation): If stmt has been in some EH region and vec_stmt could throw, add vec_stmt into the same EH region. * tree-data-ref.c (get_references_in_stmt): If IFN_MASK_LOAD has no lhs, ignore it. * internal-fn.c (expand_MASK_LOAD): Likewise. * g++.dg/vect/pr60023.cc: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207464 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vect-stmts.c')
-rw-r--r--gcc/tree-vect-stmts.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 2a2364d9542..8ed834bc5fa 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -1691,6 +1691,13 @@ vect_finish_stmt_generation (gimple stmt, gimple vec_stmt,
}
gimple_set_location (vec_stmt, gimple_location (stmt));
+
+ /* While EH edges will generally prevent vectorization, stmt might
+ e.g. be in a must-not-throw region. Ensure newly created stmts
+ that could throw are part of the same region. */
+ int lp_nr = lookup_stmt_eh_lp (stmt);
+ if (lp_nr != 0 && stmt_could_throw_p (vec_stmt))
+ add_stmt_to_eh_lp (vec_stmt, lp_nr);
}
/* Checks if CALL can be vectorized in type VECTYPE. Returns