From: Richard Kenner Date: Sun, 13 Apr 1997 12:15:13 +0000 (-0400) Subject: (invariant_p, case REG): Pointers into frame are not invariants if X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1f027d54a1f8d5ca34a8924eeea12af92d1075c8;p=gcc.git (invariant_p, case REG): Pointers into frame are not invariants if function has nonlocal gotos. From-SVN: r13862 --- diff --git a/gcc/loop.c b/gcc/loop.c index 3e7bb58e3e3..698e7a1b9de 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -2761,14 +2761,19 @@ invariant_p (x) case REG: /* We used to check RTX_UNCHANGING_P (x) here, but that is invalid since the reg might be set by initialization within the loop. */ - if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx - || x == arg_pointer_rtx) + + if ((x == frame_pointer_rtx || x == hard_frame_pointer_rtx + || x == arg_pointer_rtx) + && ! current_function_has_nonlocal_goto) return 1; + if (loop_has_call && REGNO (x) < FIRST_PSEUDO_REGISTER && call_used_regs[REGNO (x)]) return 0; + if (n_times_set[REGNO (x)] < 0) return 2; + return n_times_set[REGNO (x)] == 0; case MEM: