Message ID | patch-14027-tamar@arm.com |
---|---|
State | New |
Headers | show |
Series | middle-end slp: elide intermediate nodes for complex add and avoid truncate | expand |
On Thu, 14 Jan 2021, Tamar Christina wrote: > Hi All, > > 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. > > Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. > > Ok for master? OK. Thanks, Richard. > Thanks, > Tamar > > gcc/ChangeLog: > > * tree-vect-slp-patterns.c (complex_add_pattern::build): > > --- inline copy of patch -- > diff --git a/gcc/tree-vect-slp-patterns.c b/gcc/tree-vect-slp-patterns.c > index be066b08310b72320fdbeb88a6b2969151f73cdc..e9f70958fdc32427ab0e1cceadfed41dfa091b47 100644 > --- a/gcc/tree-vect-slp-patterns.c > +++ b/gcc/tree-vect-slp-patterns.c > @@ -645,23 +645,21 @@ class complex_add_pattern : public complex_pattern > void > complex_add_pattern::build (vec_info *vinfo) > { > - auto_vec<slp_tree> nodes; > + SLP_TREE_CHILDREN (*this->m_node).reserve_exact (2); > + > slp_tree node = this->m_ops[0]; > vec<slp_tree> 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); > } > > > >
diff --git a/gcc/tree-vect-slp-patterns.c b/gcc/tree-vect-slp-patterns.c index be066b08310b72320fdbeb88a6b2969151f73cdc..e9f70958fdc32427ab0e1cceadfed41dfa091b47 100644 --- a/gcc/tree-vect-slp-patterns.c +++ b/gcc/tree-vect-slp-patterns.c @@ -645,23 +645,21 @@ class complex_add_pattern : public complex_pattern void complex_add_pattern::build (vec_info *vinfo) { - auto_vec<slp_tree> nodes; + SLP_TREE_CHILDREN (*this->m_node).reserve_exact (2); + slp_tree node = this->m_ops[0]; vec<slp_tree> 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); }