Since SLP graph partitioning works on scalar stmts (because it's done
for costing) we have to make sure to visit permute nodes multiple
times since they will not pull partitions together.
2021-04-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/99924
* tree-vect-slp.c (vect_bb_partition_graph_r): Do not mark
nodes w/o scalar stmts as visited.
* gfortran.dg/vect/pr99924.f90: New testcase.
--- /dev/null
+! { dg-do compile }
+! { dg-additional-options "-march=armv8.3-a" { target aarch64-*-* } }
+subroutine cunhj (tfn, asum, bsum)
+ implicit none
+ complex :: up, tfn, asum, bsum
+ real :: ar
+
+ up = tfn * ar
+ bsum = up + ar
+ asum = up + asum
+ return
+end subroutine cunhj
stmt_instance = instance;
}
- if (visited.add (node))
+ if (!SLP_TREE_SCALAR_STMTS (node).is_empty () && visited.add (node))
return;
slp_tree child;