aboutsummaryrefslogtreecommitdiff
path: root/gcc/loop.c
diff options
context:
space:
mode:
authorJ"orn Rennecke <joern.rennecke@superh.com>2003-12-15 17:42:43 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2003-12-15 17:42:43 +0000
commit69f38ab9fd8ac5c7f5b68c01673c4c6366fd343c (patch)
treea160396a81237e124ff088404cc470129c589b51 /gcc/loop.c
parenta5ac3982bc53a972881bed634e3cc3dfa2141656 (diff)
downloadgcc-69f38ab9fd8ac5c7f5b68c01673c4c6366fd343c.zip
gcc-69f38ab9fd8ac5c7f5b68c01673c4c6366fd343c.tar.gz
gcc-69f38ab9fd8ac5c7f5b68c01673c4c6366fd343c.tar.bz2
reload.c (reg_overlap_mentioned_for_reload_p): When looking at a PLUS in X...
* reload.c (reg_overlap_mentioned_for_reload_p): When looking at a PLUS in X, avoid spuriously returning nonzero when IN is a REG or another simple PLUS, or a MEM containing one. * loop.c (loop_invariant_p): Amend comment about where new registers might come from. From-SVN: r74638
Diffstat (limited to 'gcc/loop.c')
-rw-r--r--gcc/loop.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/loop.c b/gcc/loop.c
index 8deb398..93bb328 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -3298,8 +3298,14 @@ loop_invariant_p (const struct loop *loop, rtx 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. */
+ These registers created by the unroller are set in the loop,
+ hence are never invariant.
+ Other out-of-range regs can be generated by load_mems; those that
+ are written to in the loop are not invariant, while those that are
+ not written to are invariant. It would be easy for load_mems
+ to set n_times_set correctly for these registers, however, there
+ is no easy way to distinguish them from registers created by the
+ unroller. */
if (REGNO (x) >= (unsigned) regs->num)
return 0;