aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-stmts.c
diff options
context:
space:
mode:
authorIra Rosen <irar@il.ibm.com>2010-09-19 14:23:40 +0000
committerIra Rosen <irar@gcc.gnu.org>2010-09-19 14:23:40 +0000
commit039d9ea1843014ca798de2117edb70e65d0e554e (patch)
treecd497f7af39b24fc6b54ea036f9b0ec58dcf999e /gcc/tree-vect-stmts.c
parent66de86b074de01ffe1206cafaaf33d9febfc35a7 (diff)
downloadgcc-039d9ea1843014ca798de2117edb70e65d0e554e.zip
gcc-039d9ea1843014ca798de2117edb70e65d0e554e.tar.gz
gcc-039d9ea1843014ca798de2117edb70e65d0e554e.tar.bz2
re PR tree-optimization/45714 (Vectorization of double pow function causes a segmentation fault)
PR tree-optimization/45714 * tree-vect-stmts.c (vect_transform_stmt): Use a dummy statement created in vectorizable_call instead of the original statement in def stmt updates. From-SVN: r164420
Diffstat (limited to 'gcc/tree-vect-stmts.c')
-rw-r--r--gcc/tree-vect-stmts.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index f562ed2..b120dc6 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -4516,7 +4516,7 @@ vect_transform_stmt (gimple stmt, gimple_stmt_iterator *gsi,
bool is_store = false;
gimple vec_stmt = NULL;
stmt_vec_info stmt_info = vinfo_for_stmt (stmt);
- gimple orig_stmt_in_pattern;
+ gimple orig_stmt_in_pattern, orig_scalar_stmt = stmt;
bool done;
switch (STMT_VINFO_TYPE (stmt_info))
@@ -4584,6 +4584,7 @@ vect_transform_stmt (gimple stmt, gimple_stmt_iterator *gsi,
case call_vec_info_type:
gcc_assert (!slp_node);
done = vectorizable_call (stmt, gsi, &vec_stmt);
+ stmt = gsi_stmt (*gsi);
break;
case reduc_vec_info_type:
@@ -4662,7 +4663,8 @@ vect_transform_stmt (gimple stmt, gimple_stmt_iterator *gsi,
documentation of vect_pattern_recog. */
if (STMT_VINFO_IN_PATTERN_P (stmt_vinfo))
{
- gcc_assert (STMT_VINFO_RELATED_STMT (stmt_vinfo) == stmt);
+ gcc_assert (STMT_VINFO_RELATED_STMT (stmt_vinfo)
+ == orig_scalar_stmt);
STMT_VINFO_VEC_STMT (stmt_vinfo) = vec_stmt;
}
}