mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			re PR tree-optimization/60505 (Warning caused by GCC vectorizer.)
2014-04-03  Cong Hou  <congh@google.com>
PR tree-optimization/60505
    * tree-vectorizer.h (struct _stmt_vec_info): Add th field as the
    threshold of number of iterations below which no vectorization will be
    done.
    * tree-vect-loop.c (new_loop_vec_info):
    Initialize LOOP_VINFO_COST_MODEL_THRESHOLD.
    * tree-vect-loop.c (vect_analyze_loop_operations):
    Set LOOP_VINFO_COST_MODEL_THRESHOLD.
    * tree-vect-loop.c (vect_transform_loop):
    Use LOOP_VINFO_COST_MODEL_THRESHOLD.
    * tree-vect-loop.c (vect_analyze_loop_2): Check the maximum number
    of iterations of the loop and see if we should build the epilogue.
2014-04-03  Cong Hou  <congh@google.com>
    PR tree-optimization/60505
    * gcc.dg/vect/pr60505.c: New test.
From-SVN: r209065
			
			
This commit is contained in:
		
							parent
							
								
									bdc67fd6a4
								
							
						
					
					
						commit
						090cd8dc70
					
				|  | @ -1,3 +1,18 @@ | |||
| 2014-04-03  Cong Hou  <congh@google.com> | ||||
| 
 | ||||
| 	PR tree-optimization/60505 | ||||
| 	* tree-vectorizer.h (struct _stmt_vec_info): Add th field as the | ||||
| 	threshold of number of iterations below which no vectorization will be | ||||
| 	done. | ||||
| 	* tree-vect-loop.c (new_loop_vec_info): | ||||
| 	Initialize LOOP_VINFO_COST_MODEL_THRESHOLD. | ||||
| 	* tree-vect-loop.c (vect_analyze_loop_operations): | ||||
| 	Set LOOP_VINFO_COST_MODEL_THRESHOLD. | ||||
| 	* tree-vect-loop.c (vect_transform_loop): | ||||
| 	Use LOOP_VINFO_COST_MODEL_THRESHOLD. | ||||
| 	* tree-vect-loop.c (vect_analyze_loop_2): Check the maximum number | ||||
| 	of iterations of the loop and see if we should build the epilogue. | ||||
| 
 | ||||
| 2014-04-03  Richard Biener  <rguenther@suse.de> | ||||
| 
 | ||||
| 	* tree-streamer.h (struct streamer_tree_cache_d): Add next_idx | ||||
|  |  | |||
|  | @ -1,3 +1,8 @@ | |||
| 2014-04-03  Cong Hou  <congh@google.com> | ||||
| 
 | ||||
| 	PR tree-optimization/60505 | ||||
| 	* gcc.dg/vect/pr60505.c: New test. | ||||
| 
 | ||||
| 2014-04-03  Richard Biener  <rguenther@suse.de> | ||||
| 
 | ||||
| 	PR tree-optimization/60740 | ||||
|  |  | |||
|  | @ -0,0 +1,12 @@ | |||
| /* { dg-do compile } */ | ||||
| /* { dg-additional-options "-Wall -Werror" } */ | ||||
| 
 | ||||
| void foo(char *in, char *out, int num) | ||||
| { | ||||
|   int i; | ||||
|   char ovec[16] = {0}; | ||||
| 
 | ||||
|   for(i = 0; i < num ; ++i) | ||||
|     out[i] = (ovec[i] = in[i]); | ||||
|   out[num] = ovec[num/2]; | ||||
| } | ||||
|  | @ -933,6 +933,7 @@ new_loop_vec_info (struct loop *loop) | |||
|   LOOP_VINFO_NITERS (res) = NULL; | ||||
|   LOOP_VINFO_NITERS_UNCHANGED (res) = NULL; | ||||
|   LOOP_VINFO_COST_MODEL_MIN_ITERS (res) = 0; | ||||
|   LOOP_VINFO_COST_MODEL_THRESHOLD (res) = 0; | ||||
|   LOOP_VINFO_VECTORIZABLE_P (res) = 0; | ||||
|   LOOP_VINFO_PEELING_FOR_ALIGNMENT (res) = 0; | ||||
|   LOOP_VINFO_VECT_FACTOR (res) = 0; | ||||
|  | @ -1579,6 +1580,8 @@ vect_analyze_loop_operations (loop_vec_info loop_vinfo, bool slp) | |||
|           || min_profitable_iters > min_scalar_loop_bound)) | ||||
|     th = (unsigned) min_profitable_iters; | ||||
| 
 | ||||
|   LOOP_VINFO_COST_MODEL_THRESHOLD (loop_vinfo) = th; | ||||
| 
 | ||||
|   if (LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo) | ||||
|       && LOOP_VINFO_INT_NITERS (loop_vinfo) <= th) | ||||
|     { | ||||
|  | @ -1625,6 +1628,7 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo) | |||
|   bool ok, slp = false; | ||||
|   int max_vf = MAX_VECTORIZATION_FACTOR; | ||||
|   int min_vf = 2; | ||||
|   unsigned int th; | ||||
| 
 | ||||
|   /* Find all data references in the loop (which correspond to vdefs/vuses)
 | ||||
|      and analyze their evolution in the loop.  Also adjust the minimal | ||||
|  | @ -1769,6 +1773,10 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo) | |||
| 
 | ||||
|   /* Decide whether we need to create an epilogue loop to handle
 | ||||
|      remaining scalar iterations.  */ | ||||
|   th = ((LOOP_VINFO_COST_MODEL_THRESHOLD (loop_vinfo) + 1) | ||||
|         / LOOP_VINFO_VECT_FACTOR (loop_vinfo)) | ||||
|        * LOOP_VINFO_VECT_FACTOR (loop_vinfo); | ||||
| 
 | ||||
|   if (LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo) | ||||
|       && LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo) > 0) | ||||
|     { | ||||
|  | @ -1779,7 +1787,14 @@ vect_analyze_loop_2 (loop_vec_info loop_vinfo) | |||
|     } | ||||
|   else if (LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo) | ||||
| 	   || (tree_ctz (LOOP_VINFO_NITERS (loop_vinfo)) | ||||
| 	       < (unsigned)exact_log2 (LOOP_VINFO_VECT_FACTOR (loop_vinfo)))) | ||||
| 	       < (unsigned)exact_log2 (LOOP_VINFO_VECT_FACTOR (loop_vinfo)) | ||||
|                /* In case of versioning, check if the maximum number of
 | ||||
|                   iterations is greater than th.  If they are identical, | ||||
|                   the epilogue is unnecessary.  */ | ||||
| 	       && ((!LOOP_REQUIRES_VERSIONING_FOR_ALIAS (loop_vinfo) | ||||
| 	            && !LOOP_REQUIRES_VERSIONING_FOR_ALIGNMENT (loop_vinfo)) | ||||
|                    || (unsigned HOST_WIDE_INT)max_stmt_executions_int | ||||
| 		        (LOOP_VINFO_LOOP (loop_vinfo)) > th))) | ||||
|     LOOP_VINFO_PEELING_FOR_NITER (loop_vinfo) = true; | ||||
| 
 | ||||
|   /* If an epilogue loop is required make sure we can create one.  */ | ||||
|  | @ -5775,9 +5790,7 @@ vect_transform_loop (loop_vec_info loop_vinfo) | |||
|      by our caller.  If the threshold makes all loops profitable that | ||||
|      run at least the vectorization factor number of times checking | ||||
|      is pointless, too.  */ | ||||
|   th = ((PARAM_VALUE (PARAM_MIN_VECT_LOOP_BOUND) | ||||
| 	 * LOOP_VINFO_VECT_FACTOR (loop_vinfo)) - 1); | ||||
|   th = MAX (th, LOOP_VINFO_COST_MODEL_MIN_ITERS (loop_vinfo)); | ||||
|   th = LOOP_VINFO_COST_MODEL_THRESHOLD (loop_vinfo); | ||||
|   if (th >= LOOP_VINFO_VECT_FACTOR (loop_vinfo) - 1 | ||||
|       && !LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)) | ||||
|     { | ||||
|  |  | |||
|  | @ -264,6 +264,11 @@ typedef struct _loop_vec_info { | |||
| 	     values unknown at compile time.  */ | ||||
|   int min_profitable_iters; | ||||
| 
 | ||||
|   /* Threshold of number of iterations below which vectorzation will not be
 | ||||
|      performed. It is calculated from MIN_PROFITABLE_ITERS and | ||||
|      PARAM_MIN_VECT_LOOP_BOUND.  */ | ||||
|   unsigned int th; | ||||
| 
 | ||||
|   /* Is the loop vectorizable? */ | ||||
|   bool vectorizable; | ||||
| 
 | ||||
|  | @ -382,6 +387,7 @@ typedef struct _loop_vec_info { | |||
|    cost model.  */ | ||||
| #define LOOP_VINFO_NITERS_UNCHANGED(L)     (L)->num_iters_unchanged | ||||
| #define LOOP_VINFO_COST_MODEL_MIN_ITERS(L) (L)->min_profitable_iters | ||||
| #define LOOP_VINFO_COST_MODEL_THRESHOLD(L) (L)->th | ||||
| #define LOOP_VINFO_VECTORIZABLE_P(L)       (L)->vectorizable | ||||
| #define LOOP_VINFO_VECT_FACTOR(L)          (L)->vectorization_factor | ||||
| #define LOOP_VINFO_PTR_MASK(L)             (L)->ptr_mask | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Cong Hou
						Cong Hou