From 4f73495e075c5f1cc0f4c762b03b2d5a77099ea4 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 27 Mar 2001 23:34:51 -0800 Subject: [PATCH] rtlanal.c (rtx_addr_can_trap_p): Virtual registers cannot trap. * rtlanal.c (rtx_addr_can_trap_p): Virtual registers cannot trap. Auto-inc addresses trap only if their base register does. From-SVN: r40914 --- gcc/ChangeLog | 3 +++ gcc/rtlanal.c | 24 +++++++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d5164f8..0b0379d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ 2001-03-27 Richard Henderson + * rtlanal.c (rtx_addr_can_trap_p): Virtual registers cannot trap. + Auto-inc addresses trap only if their base register does. + * except.c (can_throw_internal): Rename from can_throw. * except.h, resource.c: Update references. diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index be9374e..db8e696 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -216,10 +216,16 @@ rtx_addr_can_trap_p (x) case REG: /* As in rtx_varies_p, we have to use the actual rtx, not reg number. */ - return ! (x == frame_pointer_rtx || x == hard_frame_pointer_rtx - || x == stack_pointer_rtx - /* The arg pointer varies if it is not a fixed register. */ - || (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM])); + if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx + || x == stack_pointer_rtx + /* The arg pointer varies if it is not a fixed register. */ + || (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM])) + return 0; + /* All of the virtual frame registers are stack references. */ + if (REGNO (x) >= FIRST_VIRTUAL_REGISTER + && REGNO (x) <= LAST_VIRTUAL_REGISTER) + return 0; + return 1; case CONST: return rtx_addr_can_trap_p (XEXP (x, 0)); @@ -234,8 +240,16 @@ rtx_addr_can_trap_p (x) && CONSTANT_P (XEXP (x, 1)))); case LO_SUM: + case PRE_MODIFY: return rtx_addr_can_trap_p (XEXP (x, 1)); - + + case PRE_DEC: + case PRE_INC: + case POST_DEC: + case POST_INC: + case POST_MODIFY: + return rtx_addr_can_trap_p (XEXP (x, 0)); + default: break; } -- 2.7.4