aboutsummaryrefslogtreecommitdiff
path: root/gcc/local-alloc.c
diff options
context:
space:
mode:
authorSteven Bosscher <steven@gcc.gnu.org>2007-02-18 22:33:23 +0000
committerSteven Bosscher <steven@gcc.gnu.org>2007-02-18 22:33:23 +0000
commit8800a9b349e790a867c3dd1a7a7807929e97e400 (patch)
treea3df7eb8adb0f115eb006dd8b2e382fe076b9a22 /gcc/local-alloc.c
parent03f79051aed05fa47ae45bebc93083b6777e2896 (diff)
downloadgcc-8800a9b349e790a867c3dd1a7a7807929e97e400.zip
gcc-8800a9b349e790a867c3dd1a7a7807929e97e400.tar.gz
gcc-8800a9b349e790a867c3dd1a7a7807929e97e400.tar.bz2
re PR rtl-optimization/30773 (Spec cpu2k6/h264ref and sphinx3 miscompare regression)
PR rtl-optimization/30773 * local-alloc.c (update_equiv_regs): Do not set reg_equiv_init if we fail to attach a REG_EQUIV note. From-SVN: r122106
Diffstat (limited to 'gcc/local-alloc.c')
-rw-r--r--gcc/local-alloc.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c
index 6f24968..f46b9c9 100644
--- a/gcc/local-alloc.c
+++ b/gcc/local-alloc.c
@@ -1062,10 +1062,11 @@ update_equiv_regs (void)
{
rtx init_insn = XEXP (reg_equiv[regno].init_insns, 0);
if (validate_equiv_mem (init_insn, src, dest)
- && ! memref_used_between_p (dest, init_insn, insn))
+ && ! memref_used_between_p (dest, init_insn, insn)
+ /* Attaching a REG_EQUIV note will fail if INIT_INSN has
+ multiple sets. */
+ && set_unique_reg_note (init_insn, REG_EQUIV, copy_rtx (dest)))
{
- set_unique_reg_note (init_insn, REG_EQUIV, copy_rtx (dest));
-
/* This insn makes the equivalence, not the one initializing
the register. */
reg_equiv_init[regno]