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]

Re: avoid unstability of reg-stack results


On Mon, Jul 30, 2001 at 12:49:43PM +0200, Jan Hubicka wrote:
> 	* reg-stack.c (block_info_def): Add predecesors counter and stack_out.
> 	(reg_to_stack): Call mark_dfs_back_edges; count the predecesors.
> 	(compensate_edge): Break out from ...
> 	(convert_regs_1): ... here; do smart choosing of stack_out to copy.
> 	(convert_regs_2): Set block_done once block is really done;
> 	Do updating of the predecesors counts.

Ok.

> !       if (!(e->flags & EDGE_DFS_BACK)
> ! 	  && (!beste
> ! 	      || EDGE_FREQUENCY (beste) < EDGE_FREQUENCY (e)
> ! 	      || beste->count < e->count
> ! 	      || (beste->count == e->count
> ! 		  && (((e->flags & EDGE_CRITICAL)
> ! 		       && !(beste->flags & EDGE_CRITICAL))
> ! 		      || (((e->flags & EDGE_CRITICAL)
> ! 			   == (beste->flags & EDGE_CRITICAL))
> ! 			  && e->src->index < beste->src->index)))))

This is a lot more readable split into multiple comparisons:

	if (! beste)
	  beste = e;
	else if (EDGE_FREQUENCY (beste) < EDGE_FREQUENCY (e))
	  beste = e;
	else if (beste->count < e->count)
	  beste = e;
	else if (beste->count > e->count)
	  ;
	else if ((e->flags & EDGE_CRITICAL) != (beste->flags & EDGE_CRITICAL))
	  {
	    if (e->flags & EDGE_CRITICAL)
	      beste = e;
	  }
	else if (e->src->index < beste->src->index)
	  beste = e;
	

r~


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