aboutsummaryrefslogtreecommitdiff
path: root/gcc/regmove.c
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel1@de.ibm.com>2007-03-29 06:57:42 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2007-03-29 06:57:42 +0000
commit040f69ebaac3cb2fe8b26ff736d5885db4f16f6b (patch)
treea9b8896101a46f709414a0439dbbf005f2610a95 /gcc/regmove.c
parent4beb5c4bd1e60a4bd7549795b39aa7ea16302b3d (diff)
downloadgcc-040f69ebaac3cb2fe8b26ff736d5885db4f16f6b.zip
gcc-040f69ebaac3cb2fe8b26ff736d5885db4f16f6b.tar.gz
gcc-040f69ebaac3cb2fe8b26ff736d5885db4f16f6b.tar.bz2
regmove.c (optimize_reg_copy_1): Don't perform DEST->SRC repair action if SRC->DEST replacement failed anyway.
2007-03-29 Andreas Krebbel <krebbel1@de.ibm.com> * regmove.c (optimize_reg_copy_1): Don't perform DEST->SRC repair action if SRC->DEST replacement failed anyway. From-SVN: r123323
Diffstat (limited to 'gcc/regmove.c')
-rw-r--r--gcc/regmove.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/gcc/regmove.c b/gcc/regmove.c
index 3c059f4..06272e5 100644
--- a/gcc/regmove.c
+++ b/gcc/regmove.c
@@ -471,15 +471,15 @@ optimize_reg_copy_1 (rtx insn, rtx dest, rtx src)
if (sregno < FIRST_PSEUDO_REGISTER
&& reg_mentioned_p (dest, PATTERN (q)))
failed = 1;
+
+ /* Attempt to replace all uses. */
+ else if (!validate_replace_rtx (src, dest, q))
+ failed = 1;
- /* Replace all uses and make sure that the register
- isn't still present. */
- else if (validate_replace_rtx (src, dest, q)
- && (sregno >= FIRST_PSEUDO_REGISTER
- || ! reg_overlap_mentioned_p (src,
- PATTERN (q))))
- ;
- else
+ /* If this succeeded, but some part of the register
+ is still present, undo the replacement. */
+ else if (sregno < FIRST_PSEUDO_REGISTER
+ && reg_overlap_mentioned_p (src, PATTERN (q)))
{
validate_replace_rtx (dest, src, q);
failed = 1;