aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-12-10 12:20:12 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-12-10 12:20:12 +0000
commitb78500ecb86ef800509270d2d2f161e4eb9aadd0 (patch)
treef27664630bf79406ff44ce05815c4f52fbb822c1 /gcc
parentf1c13d6ddeecc9da5f53643b6b6b715546d670fe (diff)
downloadgcc-b78500ecb86ef800509270d2d2f161e4eb9aadd0.zip
gcc-b78500ecb86ef800509270d2d2f161e4eb9aadd0.tar.gz
gcc-b78500ecb86ef800509270d2d2f161e4eb9aadd0.tar.bz2
Add missing conversion in vect_create_epilog_for_reduction
The direct_slp_reduc code in vect_create_epilog_for_reduction was still assuming that all types involved in a reduction are the same (up to types_compatible_p), whereas we now support differences in sign. This was causing an ICE in gcc.dg/vect/pr92324-4.c for SVE. 2019-12-10 Richard Sandiford <richard.sandiford@arm.com> gcc/ * tree-vect-loop.c (vect_create_epilog_for_reduction): When handling direct_slp_reduc, allow the PHI arguments to have a different type from the vector elements. From-SVN: r279164
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree-vect-loop.c2
2 files changed, 8 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0ca3e15..ffc2d26 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2019-12-10 Richard Sandiford <richard.sandiford@arm.com>
+ * tree-vect-loop.c (vect_create_epilog_for_reduction): When
+ handling direct_slp_reduc, allow the PHI arguments to have
+ a different type from the vector elements.
+
+2019-12-10 Richard Sandiford <richard.sandiford@arm.com>
+
* tree-vect-stmts.c (vectorizable_condition): Record the loop
masks required for extract-last reductions.
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 50f1a22..353a5ff 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -5054,6 +5054,8 @@ vect_create_epilog_for_reduction (stmt_vec_info stmt_info,
tree scalar_value
= PHI_ARG_DEF_FROM_EDGE (orig_phis[i]->stmt,
loop_preheader_edge (loop));
+ scalar_value = gimple_convert (&seq, TREE_TYPE (vectype),
+ scalar_value);
vector_identity = gimple_build_vector_from_val (&seq, vectype,
scalar_value);
}