aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2002-02-07 00:57:04 -0800
committerRichard Henderson <rth@gcc.gnu.org>2002-02-07 00:57:04 -0800
commit9b462c4274cd675e51fe0b856a903828d78d7cd7 (patch)
treee762c2f5f7d5a1e88c4f53877a61a162f6301be0 /gcc
parent19c881777cb933a3a5206b49ea4598070fb3b594 (diff)
downloadgcc-9b462c4274cd675e51fe0b856a903828d78d7cd7.zip
gcc-9b462c4274cd675e51fe0b856a903828d78d7cd7.tar.gz
gcc-9b462c4274cd675e51fe0b856a903828d78d7cd7.tar.bz2
alias.c (find_base_value): Recall base values for fixed hard regs.
* alias.c (find_base_value): Recall base values for fixed hard regs. * loop.c (loop_regs_update): Don't use single_set on non-insns. From-SVN: r49570
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/alias.c6
-rw-r--r--gcc/loop.c6
3 files changed, 11 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ca0e395..29ef508 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2002-02-07 Richard Henderson <rth@redhat.com>
+
+ * alias.c (find_base_value): Recall base values for fixed hard regs.
+ * loop.c (loop_regs_update): Don't use single_set on non-insns.
+
2002-02-07 Alexandre Oliva <aoliva@redhat.com>
* config/mips/mips.md (define_delay) [mips16]: Adjust required
diff --git a/gcc/alias.c b/gcc/alias.c
index a84d894..95b16ca 100644
--- a/gcc/alias.c
+++ b/gcc/alias.c
@@ -744,12 +744,12 @@ find_base_value (src)
return new_reg_base_value[regno];
/* If a pseudo has a known base value, return it. Do not do this
- for hard regs since it can result in a circular dependency
- chain for registers which have values at function entry.
+ for non-fixed hard regs since it can result in a circular
+ dependency chain for registers which have values at function entry.
The test above is not sufficient because the scheduler may move
a copy out of an arg reg past the NOTE_INSN_FUNCTION_BEGIN. */
- if (regno >= FIRST_PSEUDO_REGISTER
+ if ((regno >= FIRST_PSEUDO_REGISTER || fixed_regs[regno])
&& regno < reg_base_value_size
&& reg_base_value[regno])
return reg_base_value[regno];
diff --git a/gcc/loop.c b/gcc/loop.c
index e0847a8..5c92ec3 100644
--- a/gcc/loop.c
+++ b/gcc/loop.c
@@ -7637,9 +7637,9 @@ loop_regs_update (loop, seq)
}
else
{
- rtx set = single_set (seq);
- if (set && GET_CODE (SET_DEST (set)) == REG)
- record_base_value (REGNO (SET_DEST (set)), SET_SRC (set), 0);
+ if (GET_CODE (seq) == SET
+ && GET_CODE (SET_DEST (seq)) == REG)
+ record_base_value (REGNO (SET_DEST (seq)), SET_SRC (seq), 0);
}
}