diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2018-06-20 08:06:33 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2018-06-20 08:06:33 +0000 |
commit | ed7b8123fab1de4d6da98774262c123f6d1226f9 (patch) | |
tree | f0439f36d8ce7061d229946bd7478130edc6aaee /gcc | |
parent | e3947d809d75c6bc47e600ce490c238006c2de2b (diff) | |
download | gcc-ed7b8123fab1de4d6da98774262c123f6d1226f9.zip gcc-ed7b8123fab1de4d6da98774262c123f6d1226f9.tar.gz gcc-ed7b8123fab1de4d6da98774262c123f6d1226f9.tar.bz2 |
[3/n] PR85694: Fix dummy assignment handling in vectorizable_call
vectorizable_call stubs out the original scalar statement with
a dummy assignment to the same lhs, so that we don't leave any bogus
scalar calls around. If the call is actually a pattern statement,
the code rightly took the lhs of the original bb statement:
if (is_pattern_stmt_p (stmt_info))
lhs = gimple_call_lhs (STMT_VINFO_RELATED_STMT (stmt_info));
else
lhs = gimple_call_lhs (stmt);
But it then associated the new statement with the stmt_vec_info of the
pattern statement rather than the bb statement, which meant we had two
stmt_vec_infos assigning to the same lhs. This seems to be latent at
the moment but caused problems further into the series.
2018-06-20 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* tree-vect-stmts.c (vectorizable_call): Make sure that we
use the stmt_vec_info of the original bb statement for the
new zero assignment, even if the call is part of a pattern.
From-SVN: r261786
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 7 |
2 files changed, 9 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 09ab7d8..e55c67b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2018-06-20 Richard Sandiford <richard.sandiford@arm.com> + * tree-vect-stmts.c (vectorizable_call): Make sure that we + use the stmt_vec_info of the original bb statement for the + new zero assignment, even if the call is part of a pattern. + +2018-06-20 Richard Sandiford <richard.sandiford@arm.com> + * tree-vectorizer.h (_stmt_vec_info): Note above pattern_def_seq that the sequence is attached to the original statement rather than the pattern statement. diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index af58d91..1181bc9 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -3605,13 +3605,12 @@ vectorizable_call (gimple *gs, gimple_stmt_iterator *gsi, gimple **vec_stmt, type = TREE_TYPE (scalar_dest); if (is_pattern_stmt_p (stmt_info)) - lhs = gimple_call_lhs (STMT_VINFO_RELATED_STMT (stmt_info)); - else - lhs = gimple_call_lhs (stmt); + stmt_info = vinfo_for_stmt (STMT_VINFO_RELATED_STMT (stmt_info)); + lhs = gimple_get_lhs (stmt_info->stmt); new_stmt = gimple_build_assign (lhs, build_zero_cst (type)); set_vinfo_for_stmt (new_stmt, stmt_info); - set_vinfo_for_stmt (stmt, NULL); + set_vinfo_for_stmt (stmt_info->stmt, NULL); STMT_VINFO_STMT (stmt_info) = new_stmt; gsi_replace (gsi, new_stmt, false); |