mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			re PR middle-end/65950 (exit in main is causing the path to it to become unlikely.)
2016-10-18  Andrew Pinski  <apinski@cavium.com>
        PR tree-opt/65950
        * predict.c (is_exit_with_zero_arg): New function.
        (tree_bb_level_predictions): Don't consider paths leading to exit(0)
        as nottaken.
From-SVN: r241309
			
			
This commit is contained in:
		
							parent
							
								
									5cb96b6a87
								
							
						
					
					
						commit
						e25a366f6f
					
				|  | @ -1,3 +1,10 @@ | ||||||
|  | 2016-10-18  Andrew Pinski  <apinski@cavium.com> | ||||||
|  | 
 | ||||||
|  | 	PR tree-opt/65950 | ||||||
|  | 	* predict.c (is_exit_with_zero_arg): New function. | ||||||
|  | 	(tree_bb_level_predictions): Don't consider paths leading to exit(0) | ||||||
|  | 	as nottaken. | ||||||
|  | 
 | ||||||
| 2016-10-18  Uros Bizjak  <ubizjak@gmail.com> | 2016-10-18  Uros Bizjak  <ubizjak@gmail.com> | ||||||
| 
 | 
 | ||||||
| 	PR target/77991 | 	PR target/77991 | ||||||
|  |  | ||||||
|  | @ -2512,6 +2512,21 @@ tree_predict_by_opcode (basic_block bb) | ||||||
|       } |       } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /* Returns TRUE if the STMT is exit(0) like statement. */ | ||||||
|  | 
 | ||||||
|  | static bool | ||||||
|  | is_exit_with_zero_arg (const gimple *stmt) | ||||||
|  | { | ||||||
|  |   /* This is not exit, _exit or _Exit. */ | ||||||
|  |   if (!gimple_call_builtin_p (stmt, BUILT_IN_EXIT) | ||||||
|  |       && !gimple_call_builtin_p (stmt, BUILT_IN__EXIT) | ||||||
|  |       && !gimple_call_builtin_p (stmt, BUILT_IN__EXIT2)) | ||||||
|  |     return false; | ||||||
|  | 
 | ||||||
|  |   /* Argument is an interger zero. */ | ||||||
|  |   return integer_zerop (gimple_call_arg (stmt, 0)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* Try to guess whether the value of return means error code.  */ | /* Try to guess whether the value of return means error code.  */ | ||||||
| 
 | 
 | ||||||
| static enum br_predictor | static enum br_predictor | ||||||
|  | @ -2638,7 +2653,9 @@ tree_bb_level_predictions (void) | ||||||
| 
 | 
 | ||||||
| 	  if (is_gimple_call (stmt)) | 	  if (is_gimple_call (stmt)) | ||||||
| 	    { | 	    { | ||||||
| 	      if (gimple_call_noreturn_p (stmt) && has_return_edges) | 	      if (gimple_call_noreturn_p (stmt) | ||||||
|  | 		  && has_return_edges | ||||||
|  | 		  && !is_exit_with_zero_arg (stmt)) | ||||||
| 		predict_paths_leading_to (bb, PRED_NORETURN, | 		predict_paths_leading_to (bb, PRED_NORETURN, | ||||||
| 					  NOT_TAKEN); | 					  NOT_TAKEN); | ||||||
| 	      decl = gimple_call_fndecl (stmt); | 	      decl = gimple_call_fndecl (stmt); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Andrew Pinski
						Andrew Pinski