This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 10/12] always define EH_RETURN_HANDLER_RTX
- From: David Malcolm <dmalcolm at redhat dot com>
- To: tbsaunde+gcc at tbsaunde dot org
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Mon, 09 Nov 2015 12:42:46 -0500
- Subject: Re: [PATCH 10/12] always define EH_RETURN_HANDLER_RTX
- Authentication-results: sourceware.org; auth=none
- References: <1447087669-14039-1-git-send-email-tbsaunde+gcc at tbsaunde dot org> <1447087669-14039-11-git-send-email-tbsaunde+gcc at tbsaunde dot org>
On Mon, 2015-11-09 at 11:47 -0500, tbsaunde+gcc@tbsaunde.org wrote:
> From: Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
>
> gcc/ChangeLog:
>
> 2015-11-09 Trevor Saunders <tbsaunde+gcc@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);