regmove.c (optimize_reg_copy_1): Do not replace a hard register in an asm.

* regmove.c (optimize_reg_copy_1): Do not replace a hard register
	in an asm.

From-SVN: r63270
This commit is contained in:
Hans-Peter Nilsson 2003-02-22 03:17:24 +00:00 committed by Hans-Peter Nilsson
parent 9ac121af2a
commit 5192890754
2 changed files with 15 additions and 0 deletions

View File

@ -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)

View File

@ -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))))