summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>2003-02-22 03:17:24 +0000
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>2003-02-22 03:17:24 +0000
commit6360286e7cd3e72ac49ee8771352e683be208257 (patch)
tree563adae3927fc19a17b0f17e1a1866a4796c7b4e
parent7d83df95aa88c7df8a070f34a319ccb9ec2f4ea0 (diff)
downloadppe42-gcc-6360286e7cd3e72ac49ee8771352e683be208257.tar.gz
ppe42-gcc-6360286e7cd3e72ac49ee8771352e683be208257.zip
* regmove.c (optimize_reg_copy_1): Do not replace a hard register
in an asm. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@63270 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/regmove.c10
2 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 17655e6afa3..22309ff35f0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2003-02-22 Hans-Peter Nilsson <hp@axis.com>
+
+ * regmove.c (optimize_reg_copy_1): Do not replace a hard register
+ in an asm.
+
2003-02-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* Makefile.in (ggc-common.o): Depend on $(PARAMS_H)
diff --git a/gcc/regmove.c b/gcc/regmove.c
index 3553a40bc3a..2639ebd54f4 100644
--- a/gcc/regmove.c
+++ b/gcc/regmove.c
@@ -433,6 +433,16 @@ optimize_reg_copy_1 (insn, dest, src)
continue;
if (reg_set_p (src, p) || reg_set_p (dest, p)
+ /* If SRC is an asm-declared register, it must not be replaced
+ in any asm. Unfortunately, the REG_EXPR tree for the asm
+ variable may be absent in the SRC rtx, so we can't check the
+ actual register declaration easily (the asm operand will have
+ it, though). To avoid complicating the test for a rare case,
+ we just don't perform register replacement for a hard reg
+ mentioned in an asm. */
+ || (sregno < FIRST_PSEUDO_REGISTER
+ && asm_noperands (PATTERN (p)) >= 0
+ && reg_overlap_mentioned_p (src, PATTERN (p)))
/* Don't change a USE of a register. */
|| (GET_CODE (PATTERN (p)) == USE
&& reg_overlap_mentioned_p (src, XEXP (PATTERN (p), 0))))
OpenPOWER on IntegriCloud