Fix a stupid typo in my vect_optimize_slp_pass patch. Tested on aarch64-linux-gnu, pushed as obvious.
Richard gcc/ PR tree-optimization/106886 * tree-vect-slp.cc (vect_optimize_slp_pass::get_result_with_layout): Fix copying of scalar stmts. gcc/testsuite/ PR tree-optimization/106886 * gcc.dg/vect/bb-slp-layout-21.c: New test. --- gcc/testsuite/gcc.dg/vect/bb-slp-layout-21.c | 23 ++++++++++++++++++++ gcc/tree-vect-slp.cc | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/vect/bb-slp-layout-21.c diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-layout-21.c b/gcc/testsuite/gcc.dg/vect/bb-slp-layout-21.c new file mode 100644 index 00000000000..c851d58c97a --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/bb-slp-layout-21.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-march=bdver2" { target x86_64-*-* i?86-*-* } } */ + +int rl2GeomExport64_little_endian, rl2GeomExport64_little_endian_arch; +void rl2GeomExport64(unsigned char *p, double value) { + union { + unsigned char byte[8]; + double double_value; + } convert; + convert.double_value = value; + if (rl2GeomExport64_little_endian_arch) + if (rl2GeomExport64_little_endian) { + *(p + 7) = convert.byte[0]; + *(p + 6) = convert.byte[1]; + *(p + 5) = convert.byte[2]; + *(p + 4) = convert.byte[3]; + *(p + 3) = convert.byte[4]; + *(p + 2) = convert.byte[5]; + *(p + 1) = convert.byte[6]; + *p = convert.byte[7]; + } else + *p = convert.byte[7]; +} diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 3fa2dc96dda..ca3422c2a1e 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -5212,7 +5212,7 @@ vect_optimize_slp_pass::get_result_with_layout (slp_tree node, if (SLP_TREE_SCALAR_STMTS (node).length ()) { auto &stmts = SLP_TREE_SCALAR_STMTS (result); - stmts.safe_splice (SLP_TREE_SCALAR_STMTS (result)); + stmts.safe_splice (SLP_TREE_SCALAR_STMTS (node)); if (from_layout_i != 0) vect_slp_permute (m_perms[from_layout_i], stmts, false); if (to_layout_i != 0) -- 2.25.1