[PATCH] Fix PR66129

Richard Biener rguenther@suse.de
Wed May 13 12:11:00 GMT 2015


The following fixes PR66129.

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

Richard.

2015-05-13  Richard Biener  <rguenther@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);



More information about the Gcc-patches mailing list