aboutsummaryrefslogtreecommitdiff
path: root/gcc/local-alloc.c
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>1997-08-25 09:00:44 -0600
committerJeff Law <law@gcc.gnu.org>1997-08-25 09:00:44 -0600
commit39dfb55a01f2182839d6537fbfc56361f9d1e008 (patch)
tree323997d9502c515d35fc7ddcee0665d6c52285a9 /gcc/local-alloc.c
parentd78778ebf903a8b405a54d863af499626cb76b11 (diff)
downloadgcc-39dfb55a01f2182839d6537fbfc56361f9d1e008.zip
gcc-39dfb55a01f2182839d6537fbfc56361f9d1e008.tar.gz
gcc-39dfb55a01f2182839d6537fbfc56361f9d1e008.tar.bz2
version.c: Bump for new snapshot.
* version.c: Bump for new snapshot. * local-alloc.c (update_equiv_regs): All the target to reject promotion of some REG_EQUAL to REG_EQUIV notes. * pa.h (DONT_RECORD_EQUIVALENCE): Define. Fixes some c-torture failures, also improves generated code. * pa.c (secondary_reload_class): (mem (mem ... )) does not need secondary reloads. Fixes 094.fpppp/twldrv.f abort. * pa.c (hppa_builtin_saveregs): Emit a blockage insn after the store of the argument registers. Fixes c-torture failure. * fold-const.c (multiple_of_p): New function. (fold): Turn some cases of *_DIV_EXPR into EXACT_DIV_EXPR. One of the performance patches from the g77 folks. From-SVN: r14915
Diffstat (limited to 'gcc/local-alloc.c')
-rw-r--r--gcc/local-alloc.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c
index 4466169..677801e 100644
--- a/gcc/local-alloc.c
+++ b/gcc/local-alloc.c
@@ -1048,6 +1048,22 @@ update_equiv_regs ()
note = find_reg_note (insn, REG_EQUAL, NULL_RTX);
+#ifdef DONT_RECORD_EQUIVALENCE
+ /* Allow the target to reject promotions of some REG_EQUAL notes to
+ REG_EQUIV notes.
+
+ In some cases this can improve register allocation if the existence
+ of the REG_EQUIV note is likely to increase the lifetime of a register
+ that is likely to be spilled.
+
+ It may also be necessary if the target can't handle certain constant
+ expressions appearing randomly in insns, but for whatever reason
+ those expressions must be considered legitimate constant expressions
+ to prevent them from being forced into memory. */
+ if (note && DONT_RECORD_EQUIVALENCE (note))
+ note = NULL;
+#endif
+
/* Record this insn as initializing this register. */
reg_equiv_init_insn[regno] = insn;