regmove.c (optimize_reg_copy_1): Don't perform DEST->SRC repair action if SRC->DEST...
authorAndreas Krebbel <krebbel1@de.ibm.com>
Thu, 29 Mar 2007 06:57:42 +0000 (06:57 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Thu, 29 Mar 2007 06:57:42 +0000 (06:57 +0000)
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

gcc/ChangeLog
gcc/regmove.c

index 380c5339219bec43316671ed7cb3220a37ba781d..c06e792f4bdbc44043e6b31eac72d193517eed55 100644 (file)
@@ -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.
index 3c059f44a78f68e8f94ba0d0d5ee7d951cdbc564..06272e5e770625840a1fbd88c3e9e2e3050af9ef 100644 (file)
@@ -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;