On Mon, 2015-11-09 at 11:47 -0500, tbsaunde+...@tbsaunde.org wrote:
> From: Trevor Saunders <tbsaunde+...@tbsaunde.org>
> 
> gcc/ChangeLog:
> 
> 2015-11-09  Trevor Saunders  <tbsaunde+...@tbsaunde.org>
> 
>       * defaults.h (EH_RETURN_HANDLER_RTX): New default definition.
>       * df-scan.c (df_get_exit_block_use_set): Adjust.
>       * except.c (expand_eh_return): Likewise.
> ---
>  gcc/defaults.h | 4 ++++
>  gcc/df-scan.c  | 2 --
>  gcc/except.c   | 9 ++++-----
>  3 files changed, 8 insertions(+), 7 deletions(-)
> 
> diff --git a/gcc/defaults.h b/gcc/defaults.h
> index c20de44..047a0db 100644
> --- a/gcc/defaults.h
> +++ b/gcc/defaults.h
> @@ -1325,6 +1325,10 @@ see the files COPYING3 and COPYING.RUNTIME 
> respectively.  If not, see
>  #define TARGET_PECOFF 0
>  #endif
>  
> +#ifndef EH_RETURN_HANDLER_RTX
> +#define EH_RETURN_HANDLER_RTX NULL
> +#endif
> +
>  #ifdef GCC_INSN_FLAGS_H
>  /* Dependent default target macro definitions
>  
> diff --git a/gcc/df-scan.c b/gcc/df-scan.c
> index 2e5fe97..a735925 100644
> --- a/gcc/df-scan.c
> +++ b/gcc/df-scan.c
> @@ -3714,7 +3714,6 @@ df_get_exit_block_use_set (bitmap exit_block_uses)
>      }
>  #endif
>  
> -#ifdef EH_RETURN_HANDLER_RTX
>    if ((!targetm.have_epilogue () || ! epilogue_completed)
>        && crtl->calls_eh_return)
>      {
> @@ -3722,7 +3721,6 @@ df_get_exit_block_use_set (bitmap exit_block_uses)
>        if (tmp && REG_P (tmp))
>       df_mark_reg (tmp, exit_block_uses);
>      }
> -#endif
>  
>    /* Mark function return value.  */
>    diddle_return_value (df_mark_reg, (void*) exit_block_uses);
> diff --git a/gcc/except.c b/gcc/except.c
> index 1801fe7..1a41a34 100644
> --- a/gcc/except.c
> +++ b/gcc/except.c
> @@ -2255,11 +2255,10 @@ expand_eh_return (void)
>      emit_insn (targetm.gen_eh_return (crtl->eh.ehr_handler));
>    else
>      {
> -#ifdef EH_RETURN_HANDLER_RTX
> -      emit_move_insn (EH_RETURN_HANDLER_RTX, crtl->eh.ehr_handler);
> -#else
> -      error ("__builtin_eh_return not supported on this target");
> -#endif
> +      if (rtx handler = EH_RETURN_HANDLER_RTX)

Would this be clearer as

         rtx handler = EH_RETURN_HANDLER_RTX;
         if (handler)

?  (to avoid an assignment inside a conditional)

> +     emit_move_insn (handler, crtl->eh.ehr_handler);
> +      else
> +     error ("__builtin_eh_return not supported on this target");
>      }
>  
>    emit_label (around_label);


Reply via email to