diff options
author | Andreas Krebbel <krebbel1@de.ibm.com> | 2007-03-29 06:57:42 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2007-03-29 06:57:42 +0000 |
commit | 040f69ebaac3cb2fe8b26ff736d5885db4f16f6b (patch) | |
tree | a9b8896101a46f709414a0439dbbf005f2610a95 /gcc | |
parent | 4beb5c4bd1e60a4bd7549795b39aa7ea16302b3d (diff) | |
download | gcc-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')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/regmove.c | 16 |
2 files changed, 13 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 380c533..c06e792 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +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. + 2007-03-28 Mike Stump <mrs@apple.com> * config/darwin9.h (ASM_OUTPUT_ALIGNED_COMMON): Add. 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; |