The following fixes PR66129.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Richard.

2015-05-13  Richard Biener  <rguent...@suse.de>

        PR tree-optimization/66129
        * tree-vect-slp.c (vect_build_slp_tree): Make sure all ops are
        commutative.
        (vect_schedule_slp_instance): Fix typo.

Index: gcc/tree-vect-slp.c
===================================================================
*** gcc/tree-vect-slp.c (revision 223119)
--- gcc/tree-vect-slp.c (working copy)
*************** vect_build_slp_tree (loop_vec_info loop_
*** 1123,1128 ****
--- 1123,1129 ----
          && oprnds_info[1]->first_dt == vect_internal_def
          && is_gimple_assign (stmt)
          && commutative_tree_code (gimple_assign_rhs_code (stmt))
+         && !SLP_TREE_TWO_OPERATORS (*node)
          /* Do so only if the number of not successful permutes was nor more
             than a cut-ff as re-trying the recursive match on
             possibly each level of the tree would expose exponential
*************** vect_schedule_slp_instance (slp_tree nod
*** 3459,3465 ****
              tree *melts = XALLOCAVEC (tree, TYPE_VECTOR_SUBPARTS (vectype));
              for (l = 0; l < TYPE_VECTOR_SUBPARTS (vectype); ++l)
                {
!                 if (k > group_size)
                    k = 0;
                  melts[l] = build_int_cst
                      (meltype, mask[k++] * TYPE_VECTOR_SUBPARTS (vectype) + l);
--- 3460,3466 ----
              tree *melts = XALLOCAVEC (tree, TYPE_VECTOR_SUBPARTS (vectype));
              for (l = 0; l < TYPE_VECTOR_SUBPARTS (vectype); ++l)
                {
!                 if (k >= group_size)
                    k = 0;
                  melts[l] = build_int_cst
                      (meltype, mask[k++] * TYPE_VECTOR_SUBPARTS (vectype) + l);

Reply via email to