This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Avoid creating dead code in the vectorizer


When analyzing PR55334 further I noticed that when vectorizing
an invariant load we still create a regular (but dead) vector
load and an associated pointer induction variable.  That's of
course pointless.

Fix is simple.

Bootstrapped (with -O3) and tested on x86_64-unknown-linux-gnu, applied to 
trunk.

Richard.

2013-01-02  Richard Biener  <rguenther@suse.de>

	* tree-vect-stmts.c (vectorizable_load): When vectorizing an
	invariant load do not generate a vector load from the scalar
	location.

Index: gcc/tree-vect-stmts.c
===================================================================
*** gcc/tree-vect-stmts.c	(revision 194787)
--- gcc/tree-vect-stmts.c	(working copy)
*************** vectorizable_load (gimple stmt, gimple_s
*** 4988,4993 ****
--- 4988,5006 ----
  	  /* Record the mapping between SSA_NAMEs and statements.  */
  	  vect_record_grouped_load_vectors (stmt, dr_chain);
  	}
+       /* Handle invariant-load.  */
+       else if (inv_p && !bb_vinfo)
+ 	{
+ 	  gimple_stmt_iterator gsi2 = *gsi;
+ 	  gcc_assert (!grouped_load && !slp_perm);
+ 	  gsi_next (&gsi2);
+ 	  new_temp = vect_init_vector (stmt, scalar_dest,
+ 				       vectype, &gsi2);
+ 	  new_stmt = SSA_NAME_DEF_STMT (new_temp);
+ 	  /* Store vector loads in the corresponding SLP_NODE.  */
+ 	  if (slp)
+ 	    SLP_TREE_VEC_STMTS (slp_node).quick_push (new_stmt);
+ 	}
        else
  	{
  	  for (i = 0; i < vec_num; i++)
*************** vectorizable_load (gimple stmt, gimple_s
*** 5135,5151 ****
  		    }
  		}
  
- 	      /* 4. Handle invariant-load.  */
- 	      if (inv_p && !bb_vinfo)
- 		{
- 		  gimple_stmt_iterator gsi2 = *gsi;
- 		  gcc_assert (!grouped_load);
- 		  gsi_next (&gsi2);
- 		  new_temp = vect_init_vector (stmt, scalar_dest,
- 					       vectype, &gsi2);
- 		  new_stmt = SSA_NAME_DEF_STMT (new_temp);
- 		}
- 
  	      if (negative)
  		{
  		  tree perm_mask = perm_mask_for_reverse (vectype);
--- 5148,5153 ----


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]