OSDN Git Service

PR rtl-optimization/34916
authorhutchinsonandy <hutchinsonandy@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 4 Apr 2008 23:45:46 +0000 (23:45 +0000)
committerhutchinsonandy <hutchinsonandy@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 4 Apr 2008 23:45:46 +0000 (23:45 +0000)
PR middle-end/35519
* combine.c (create_log_links): Do not create duplicate LOG_LINKS
between instruction pairs

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@133920 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/combine.c

index a4fe162..a1a95f9 100644 (file)
@@ -1,3 +1,10 @@
+2008-04-04 Andy Hutchinson <hutchinsonandy@aim.com>
+
+       PR rtl-optimization/34916
+       PR middle-end/35519
+       * combine.c (create_log_links): Do not create duplicate LOG_LINKS
+       between instruction pairs.
+
 2008-04-04  Naveen.H.S  <naveen.hs@kpitcummins.com>
 
        * doc/invoke.texi: Document -mbitops for SH.
index 0fca12d..db828e8 100644 (file)
@@ -1,6 +1,6 @@
 /* Optimize by combining instructions for GNU compiler.
    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -976,8 +976,18 @@ create_log_links (void)
                      assignments later.  */
                   if (regno >= FIRST_PSEUDO_REGISTER
                       || asm_noperands (PATTERN (use_insn)) < 0)
-                    LOG_LINKS (use_insn) =
-                      alloc_INSN_LIST (insn, LOG_LINKS (use_insn));
+                   {
+                     /* Don't add duplicate links between instructions.  */
+                     rtx links;
+                     for (links = LOG_LINKS (use_insn); links;
+                          links = XEXP (links, 1))
+                       if (insn == XEXP (links, 0))
+                         break;
+
+                     if (!links)
+                       LOG_LINKS (use_insn) =
+                         alloc_INSN_LIST (insn, LOG_LINKS (use_insn));
+                   }
                 }
               next_use[regno] = NULL_RTX;
             }