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:
parent
9ac121af2a
commit
5192890754
@ -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)
|
||||
|
@ -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))))
|
||||
|
Loading…
Reference in New Issue
Block a user