From 186975e19742d2f8e02075895f31fe3547e13e9f Mon Sep 17 00:00:00 2001 From: Hans-Peter Nilsson Date: Sun, 23 Feb 2003 17:06:26 +0000 Subject: [PATCH] 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: r63326 --- gcc/ChangeLog | 5 +++++ gcc/regmove.c | 10 ++++++++++ 2 files changed, 15 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c1476f4fd6b2..ee3e03669cf6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-02-23 Hans-Peter Nilsson + + * regmove.c (optimize_reg_copy_1): Do not replace a hard register + in an asm. + 2003-02-22 Steven Bosscher PR other/3782 diff --git a/gcc/regmove.c b/gcc/regmove.c index 048cfb60ba22..df4ba089cad5 100644 --- a/gcc/regmove.c +++ b/gcc/regmove.c @@ -431,6 +431,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)))) -- 2.47.2