diff options
Diffstat (limited to 'gcc/loop.c')
-rw-r--r-- | gcc/loop.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/loop.c b/gcc/loop.c index 9461530e894..04f95ab4925 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -3273,6 +3273,13 @@ loop_invariant_p (loop, x) && REGNO (x) < FIRST_PSEUDO_REGISTER && call_used_regs[REGNO (x)]) return 0; + /* Out-of-range regs can occur when we are called from unrolling. + These have always been created by the unroller and are set in + the loop, hence are never invariant. */ + + if (REGNO (x) >= regs->num) + return 0; + if (regs->array[REGNO (x)].set_in_loop < 0) return 2; |