aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-12-17 11:23:02 +0100
committerRichard Biener <rguenth@gcc.gnu.org>2024-12-17 19:08:10 +0100
commitcfe1ad3c488693a10fafb39d68c8cabc6e48daa7 (patch)
tree6e533f69b185633e4c64fc291a56551b189b139e
parent40e5636e086e51f5908a1a01be9cba2218dc26d8 (diff)
downloadgcc-cfe1ad3c488693a10fafb39d68c8cabc6e48daa7.zip
gcc-cfe1ad3c488693a10fafb39d68c8cabc6e48daa7.tar.gz
gcc-cfe1ad3c488693a10fafb39d68c8cabc6e48daa7.tar.bz2
middle-end/118062 - bogus lowering of vector compares
The generic expand_vector_piecewise routine supports lowering of a vector operation to vector operations of smaller size. When computing the extract position from the larger vector it uses the element size in bits of the original result vector to determine the number of elements in the smaller vector. That is wrong when lowering a compare as the vector element size of a bool vector does not have to agree with that of the compare operand. The following simplifies this, fixing the error. PR middle-end/118062 * tree-vect-generic.cc (expand_vector_piecewise): Properly compute delta.
-rw-r--r--gcc/tree-vect-generic.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/tree-vect-generic.cc b/gcc/tree-vect-generic.cc
index 78f6e55..4b9cf73 100644
--- a/gcc/tree-vect-generic.cc
+++ b/gcc/tree-vect-generic.cc
@@ -292,7 +292,8 @@ expand_vector_piecewise (gimple_stmt_iterator *gsi, elem_op_func f,
tree part_width = TYPE_SIZE (inner_type);
tree index = bitsize_int (0);
int nunits = nunits_for_known_piecewise_op (type);
- int delta = tree_to_uhwi (part_width) / vector_element_bits (type);
+ int delta = (VECTOR_TYPE_P (inner_type)
+ ? nunits_for_known_piecewise_op (inner_type) : 1);
int i;
location_t loc = gimple_location (gsi_stmt (*gsi));