diff options
author | Steve Christiansen <smc@us.ibm.com> | 2001-11-07 06:24:46 +0000 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-11-06 22:24:46 -0800 |
commit | bc532bf72b5c4f37de75c7ef08a364cfd491f7f2 (patch) | |
tree | c5fddc0c80d6ba84addceb45d48bd84d3fa42ce7 /gcc | |
parent | 2a2be25e129c9d24ed6d7eeb5b2cab6c630a2d5b (diff) | |
download | gcc-bc532bf72b5c4f37de75c7ef08a364cfd491f7f2.zip gcc-bc532bf72b5c4f37de75c7ef08a364cfd491f7f2.tar.gz gcc-bc532bf72b5c4f37de75c7ef08a364cfd491f7f2.tar.bz2 |
* loop.c (loop_regs_scan): Don't invalidate PIC register.
From-SVN: r46817
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/loop.c | 17 |
2 files changed, 16 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3d76402..ab7b2fa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2001-11-06 Steve Christiansen <smc@us.ibm.com> + + * loop.c (loop_regs_scan): Don't invalidate PIC register. + 2001-11-06 Eric Christopher <echristo@redhat.com> * config/mips/mips.md(movdf_internal2): Add constraints for float @@ -8819,11 +8819,18 @@ loop_regs_scan (loop, extra_size) memset (last_set, 0, regs->num * sizeof (rtx)); } - for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) - { - regs->array[i].may_not_optimize = 1; - regs->array[i].set_in_loop = 1; - } + /* Invalidate all hard registers clobbered by calls. With one exception: + a call-clobbered PIC register is still function-invariant for our + purposes, since we can hoist any PIC calculations out of the loop. + Thus the call to rtx_varies_p. */ + if (LOOP_INFO (loop)->has_call) + for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) + if (TEST_HARD_REG_BIT (regs_invalidated_by_call, i) + && rtx_varies_p (gen_rtx_REG (Pmode, i), /*for_alias=*/1)) + { + regs->array[i].may_not_optimize = 1; + regs->array[i].set_in_loop = 1; + } #ifdef AVOID_CCMODE_COPIES /* Don't try to move insns which set CC registers if we should not |