aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-09-02 15:12:58 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2024-09-03 08:36:33 +0200
commit7c9394e84c54238dd2cf01dfaa06d8e87b39cf95 (patch)
treef87bc79e77e9ff9a6f8b0567813017a419900aa3
parent340ca7437ceb05d61797dbf3b522a495176c5a5e (diff)
downloadgcc-7c9394e84c54238dd2cf01dfaa06d8e87b39cf95.zip
gcc-7c9394e84c54238dd2cf01dfaa06d8e87b39cf95.tar.gz
gcc-7c9394e84c54238dd2cf01dfaa06d8e87b39cf95.tar.bz2
Handle mixing REALPART/IMAGPART with other components in SLP groups
The following makes sure we handle a SLP load/store group from a structure with complex and scalar members. This for example happens in gcc.target/i386/pr106010-9a.c. * tree-vect-slp.cc (vect_build_slp_tree_1): Handle mixing all of handled components besides ARRAY_RANGE_REF, drop handling of INDIRECT_REF.
-rw-r--r--gcc/tree-vect-slp.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index 5a65a99..2302d91 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -1318,13 +1318,15 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char *swap,
&& !(STMT_VINFO_GROUPED_ACCESS (stmt_info)
&& (first_stmt_code == ARRAY_REF
|| first_stmt_code == BIT_FIELD_REF
- || first_stmt_code == INDIRECT_REF
|| first_stmt_code == COMPONENT_REF
+ || first_stmt_code == REALPART_EXPR
+ || first_stmt_code == IMAGPART_EXPR
|| first_stmt_code == MEM_REF)
&& (rhs_code == ARRAY_REF
|| rhs_code == BIT_FIELD_REF
- || rhs_code == INDIRECT_REF
|| rhs_code == COMPONENT_REF
+ || rhs_code == REALPART_EXPR
+ || rhs_code == IMAGPART_EXPR
|| rhs_code == MEM_REF)))
|| (ldst_p
&& (STMT_VINFO_GROUPED_ACCESS (stmt_info)