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]

Re: [PATCH][dataflow] Clean up the treatment of def


Seongbae Park (???, ???) wrote:
> Hi,
>
> This patch simplifies the treatment of def.
> I noticed this code while reviewing recent patches from Ken Zadeck,
> that this code is unnecessary because we already take care of
> the same condition during the scanning.
>
> Another minor change is to remove the bail-out code
> if the number of blocks of a function exceeds 250 - this was necessary
> during the development of dataflow branch, due to some slow path
> that are all addressed already.
>
> The patch has been bootstrapped and regtested clean on x86-64, SPARC and IA64.
> Ok for mainline ?
>
>   
This is fine. This is very old code you are removing, code that was
there before danny and I started hacking on df.

Kenny

> ChangeLog:
>
> 2007-07-30  Seongbae Park <seongbae.park@gmail.com>
>
>         * df-scan.c (df_scan_verify): Remove artificial limit on
>         the number of blocks for verification.
>         * df-problems.c (df_lr_bb_local_compute, df_simulate_find_defs,
>         df_simulate_defs): Avoid unnecessary insn checking for defs.
>
>   
> ------------------------------------------------------------------------
>
> Index: gcc/df-scan.c
> ===================================================================
> --- gcc/df-scan.c	(revision 127065)
> +++ gcc/df-scan.c	(working copy)
> @@ -4265,12 +4265,6 @@ df_scan_verify (void)
>    if (!df)
>      return;
>  
> -  /* This is a hack, but a necessary one.  If you do not do this,
> -     insn_attrtab can never be compiled in a bootstrap.  This
> -     verification is just too expensive.  */
> -  if (n_basic_blocks > 250)
> -    return;
> -
>    /* Verification is a 4 step process. */
>  
>    /* (1) All of the refs are marked by going thru the reg chains.  */
> Index: gcc/df-problems.c
> ===================================================================
> --- gcc/df-problems.c	(revision 127065)
> +++ gcc/df-problems.c	(working copy)
> @@ -1389,53 +1389,16 @@ df_lr_bb_local_compute (unsigned int bb_
>        if (!INSN_P (insn))
>  	continue;	
>  
> -      if (CALL_P (insn))
> +      for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
>  	{
> -	  for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
> +	  struct df_ref *def = *def_rec;
> +	  /* If the def is to only part of the reg, it does
> +	     not kill the other defs that reach here.  */
> +	  if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
>  	    {
> -	      struct df_ref *def = *def_rec;
>  	      unsigned int dregno = DF_REF_REGNO (def);
> -	      
> -	      if (DF_REF_FLAGS (def) & DF_REF_MUST_CLOBBER)
> -		{
> -		  if (dregno >= FIRST_PSEUDO_REGISTER
> -		      || !(SIBLING_CALL_P (insn)
> -			   && bitmap_bit_p (df->exit_block_uses, dregno)
> -			   && !refers_to_regno_p (dregno, dregno+1,
> -						  current_function_return_rtx,
> -						  (rtx *)0)))
> -		    {
> -		      /* If the def is to only part of the reg, it does
> -			 not kill the other defs that reach here.  */
> -		      if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
> -			{
> -			  bitmap_set_bit (bb_info->def, dregno);
> -			  bitmap_clear_bit (bb_info->use, dregno);
> -			}
> -		    }
> -		}
> -	      else
> -		/* This is the return value.  */
> -		if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
> -		  {
> -		    bitmap_set_bit (bb_info->def, dregno);
> -		    bitmap_clear_bit (bb_info->use, dregno);
> -		  }
> -	    }
> -	}
> -      else
> -	{
> -	  for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
> -	    {
> -	      struct df_ref *def = *def_rec;
> -	      /* If the def is to only part of the reg, it does
> -		     not kill the other defs that reach here.  */
> -	      if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
> -		{
> -		  unsigned int dregno = DF_REF_REGNO (def);
> -		  bitmap_set_bit (bb_info->def, dregno);
> -		  bitmap_clear_bit (bb_info->use, dregno);
> -		}
> +	      bitmap_set_bit (bb_info->def, dregno);
> +	      bitmap_clear_bit (bb_info->use, dregno);
>  	    }
>  	}
>  
> @@ -4218,44 +4181,13 @@ df_simulate_find_defs (rtx insn, bitmap 
>    struct df_ref **def_rec;
>    unsigned int uid = INSN_UID (insn);
>  
> -  if (CALL_P (insn))
> +  for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
>      {
> -      for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
> -	{
> -	  struct df_ref *def = *def_rec;
> -	  unsigned int dregno = DF_REF_REGNO (def);
> -	  
> -	  if (DF_REF_FLAGS (def) & DF_REF_MUST_CLOBBER)
> -	    {
> -	      if (dregno >= FIRST_PSEUDO_REGISTER
> -		  || !(SIBLING_CALL_P (insn)
> -		       && bitmap_bit_p (df->exit_block_uses, dregno)
> -		       && !refers_to_regno_p (dregno, dregno+1,
> -					      current_function_return_rtx,
> -					      (rtx *)0)))
> -		{
> -		  /* If the def is to only part of the reg, it does
> -		     not kill the other defs that reach here.  */
> -		  if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
> -		    bitmap_set_bit (defs, dregno);
> -		}
> -	    }
> -	  else
> -	    /* This is the return value.  */
> -	    if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
> -	      bitmap_set_bit (defs, dregno);
> -	}
> -    }
> -  else
> -    {
> -      for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
> -	{
> -	  struct df_ref *def = *def_rec;
> -	  /* If the def is to only part of the reg, it does
> -	     not kill the other defs that reach here.  */
> -	  if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
> -	    bitmap_set_bit (defs, DF_REF_REGNO (def));
> -	}
> +      struct df_ref *def = *def_rec;
> +      /* If the def is to only part of the reg, it does
> +	 not kill the other defs that reach here.  */
> +      if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
> +	bitmap_set_bit (defs, DF_REF_REGNO (def));
>      }
>  }
>  
> @@ -4268,46 +4200,15 @@ df_simulate_defs (rtx insn, bitmap live)
>    struct df_ref **def_rec;
>    unsigned int uid = INSN_UID (insn);
>  
> -  if (CALL_P (insn))
> +  for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
>      {
> -      for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
> -	{
> -	  struct df_ref *def = *def_rec;
> -	  unsigned int dregno = DF_REF_REGNO (def);
> -	  
> -	  if (DF_REF_FLAGS (def) & DF_REF_MUST_CLOBBER)
> -	    {
> -	      if (dregno >= FIRST_PSEUDO_REGISTER
> -		  || !(SIBLING_CALL_P (insn)
> -		       && bitmap_bit_p (df->exit_block_uses, dregno)
> -		       && !refers_to_regno_p (dregno, dregno+1,
> -					      current_function_return_rtx,
> -					      (rtx *)0)))
> -		{
> -		  /* If the def is to only part of the reg, it does
> -		     not kill the other defs that reach here.  */
> -		  if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
> -		    bitmap_clear_bit (live, dregno);
> -		}
> -	    }
> -	  else
> -	    /* This is the return value.  */
> -	    if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
> -	      bitmap_clear_bit (live, dregno);
> -	}
> -    }
> -  else
> -    {
> -      for (def_rec = DF_INSN_UID_DEFS (uid); *def_rec; def_rec++)
> -	{
> -	  struct df_ref *def = *def_rec;
> -	  unsigned int dregno = DF_REF_REGNO (def);
> -  
> -	  /* If the def is to only part of the reg, it does
> -	     not kill the other defs that reach here.  */
> -	  if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
> -	    bitmap_clear_bit (live, dregno);
> -	}
> +      struct df_ref *def = *def_rec;
> +      unsigned int dregno = DF_REF_REGNO (def);
> +
> +      /* If the def is to only part of the reg, it does
> +	 not kill the other defs that reach here.  */
> +      if (!(DF_REF_FLAGS (def) & (DF_REF_PARTIAL | DF_REF_CONDITIONAL)))
> +	bitmap_clear_bit (live, dregno);
>      }
>  }  
>  
>   


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