From fe70119531395c8105b098bfa915c003c78be038 Mon Sep 17 00:00:00 2001 From: Tamar Christina Date: Thu, 14 Jan 2021 20:49:55 +0000 Subject: [PATCH] slp: elide intermediate nodes for complex add and avoid truncate This applies the same feedback received for MUL and the rest to ADD which was already committed. In short it elides the intermediate nodes vec and avoids the use of truncate on the SLP child. gcc/ChangeLog: * tree-vect-slp-patterns.c (complex_add_pattern::build): Elide nodes. --- gcc/tree-vect-slp-patterns.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/gcc/tree-vect-slp-patterns.c b/gcc/tree-vect-slp-patterns.c index 3903cdb1169..c4fa269baa3 100644 --- a/gcc/tree-vect-slp-patterns.c +++ b/gcc/tree-vect-slp-patterns.c @@ -627,23 +627,21 @@ class complex_add_pattern : public complex_pattern void complex_add_pattern::build (vec_info *vinfo) { - auto_vec nodes; + SLP_TREE_CHILDREN (*this->m_node).reserve_exact (2); + slp_tree node = this->m_ops[0]; vec children = SLP_TREE_CHILDREN (node); /* First re-arrange the children. */ - nodes.create (children.length ()); - nodes.quick_push (children[0]); - nodes.quick_push (vect_build_swap_evenodd_node (children[1])); + SLP_TREE_CHILDREN (*this->m_node)[0] = children[0]; + SLP_TREE_CHILDREN (*this->m_node)[1] = + vect_build_swap_evenodd_node (children[1]); - SLP_TREE_REF_COUNT (nodes[0])++; - SLP_TREE_REF_COUNT (nodes[1])++; + SLP_TREE_REF_COUNT (SLP_TREE_CHILDREN (*this->m_node)[0])++; + SLP_TREE_REF_COUNT (SLP_TREE_CHILDREN (*this->m_node)[1])++; vect_free_slp_tree (this->m_ops[0]); vect_free_slp_tree (this->m_ops[1]); - SLP_TREE_CHILDREN (*this->m_node).truncate (0); - SLP_TREE_CHILDREN (*this->m_node).safe_splice (nodes); - complex_pattern::build (vinfo); } -- 2.30.2