[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gcc-patches
Subject:    Re: CFG branch merge 8 - SMALL_REGISTER_CLASSES versus profiling
From:       Richard Henderson <rth () redhat ! com>
Date:       2002-02-28 23:33:04
[Download RAW message or body]

On Thu, Feb 28, 2002 at 09:32:34PM +0100, Jan Hubicka wrote:
> !   /* Special case -- avoid inserting code between call and storing
> !      its return value.  */
> !   if (watch_calls && (e->flags & EDGE_FALLTHRU) && !e->dest->pred->pred_next)
> !     {
> !       rtx insert_after = e->src->end;
> !       if (insert_after
> ! 	  && SMALL_REGISTER_CLASSES
> ! 	  && GET_CODE (insert_after) == CALL_INSN
> ! 	  && (GET_CODE (PATTERN (insert_after)) == SET
> ! 	      || (GET_CODE (PATTERN (insert_after)) == PARALLEL
> ! 		  && GET_CODE (XVECEXP (PATTERN (insert_after), 0, 0)) ==
> ! 		  SET)))
> ! 	{
> ! 	  rtx return_reg;
> ! 	  rtx next_insert_after = next_nonnote_insn (insert_after);
> ! 	  rtx set;
> ! 
> ! 	  /* The first insn after the call may be a stack pop, skip it.  */
> ! 	  if (next_insert_after
> ! 	      && GET_CODE (next_insert_after) == INSN
> ! 	      && (set = single_set (next_insert_after))
> ! 	      && GET_CODE (set) == SET
> ! 	      && SET_DEST (set) == stack_pointer_rtx)
> ! 	    next_insert_after = next_nonnote_insn (next_insert_after);
> ! 	  if (next_insert_after && GET_CODE (next_insert_after) == INSN)
> ! 	    {
> ! 	      if (GET_CODE (PATTERN (insert_after)) == SET)
> ! 		return_reg = SET_DEST (PATTERN (insert_after));
> ! 	      else
> ! 		return_reg =
> ! 		  SET_DEST (XVECEXP (PATTERN (insert_after), 0, 0));
> ! 
> ! 	      /* Now, NEXT_INSERT_AFTER may be an instruction that uses the
> ! 	         return value.  However, it could also be something else,
> ! 	         like a CODE_LABEL, so check that the code is INSN.  */
> ! 	      if (next_insert_after
> ! 		  && GET_CODE (next_insert_after) == INSN
> ! 		  && reg_referenced_p (return_reg,
> ! 				       PATTERN (next_insert_after)))
> ! 		insert_after = next_insert_after;

I think all this should use keep_with_call_p and not be
dependent on SMALL_REGISTER_CLASSES.  As can be seen with
ia64 when you put stuff before the gp reload.


r~
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic