]> gcc.gnu.org Git - gcc.git/commitdiff
loop.c (move_movables): While removing insn sequences...
authorDavid S. Miller <davem@pierdol.cobaltmicro.com>
Sun, 13 Sep 1998 05:44:40 +0000 (05:44 +0000)
committerDavid S. Miller <davem@gcc.gnu.org>
Sun, 13 Sep 1998 05:44:40 +0000 (22:44 -0700)
* loop.c (move_movables): While removing insn sequences, preserve
the next pointer of the most recently deleted insn when we skip
over a NOTE.

From-SVN: r22402

gcc/ChangeLog
gcc/loop.c

index 47464c38a480df9e526b79743f68751e37776b15..fb5fe2399b443ecf21d2a22d9f30fb345d1f8c5f 100644 (file)
@@ -1,3 +1,9 @@
+Sun Sep 13 04:37:28 1998  David S. Miller  <davem@pierdol.cobaltmicro.com>
+
+       * loop.c (move_movables): While removing insn sequences, preserve
+       the next pointer of the most recently deleted insn when we skip
+       over a NOTE.
+
 Sat Sep 12 11:37:19 1998  Michael Meissner  <meissner@cygnus.com>
 
        * rs6000.h ({ASM,CPP}_CPU_SPEC): Add support for all machines
index eae3d7451f4370bfe77aa1ca3f6cab0f1eea4b49..3efb200f0f79d050fa4a3a5a2d8f4978f95244bc 100644 (file)
@@ -1916,9 +1916,17 @@ move_movables (movables, threshold, insn_count, loop_start, end, nregs)
                            temp = delete_insn (temp);
                        }
 
+                     temp = p;
                      p = delete_insn (p);
+
+                     /* simplify_giv_expr expects that it can walk the insns
+                        at m->insn forwards and see this old sequence we are
+                        tossing here.  delete_insn does preserve the next
+                        pointers, but when we skip over a NOTE we must fix
+                        it up.  Otherwise that code walks into the non-deleted
+                        insn stream.  */
                      while (p && GET_CODE (p) == NOTE)
-                       p = NEXT_INSN (p);
+                       p = NEXT_INSN (temp) = NEXT_INSN (p);
                    }
 
                  start_sequence ();
@@ -2125,9 +2133,18 @@ move_movables (movables, threshold, insn_count, loop_start, end, nregs)
                          XEXP (temp, 0) = i1;
                        }
 
+                     temp = p;
                      delete_insn (p);
-                     do p = NEXT_INSN (p);
-                     while (p && GET_CODE (p) == NOTE);
+                     p = NEXT_INSN (p);
+
+                     /* simplify_giv_expr expects that it can walk the insns
+                        at m->insn forwards and see this old sequence we are
+                        tossing here.  delete_insn does preserve the next
+                        pointers, but when we skip over a NOTE we must fix
+                        it up.  Otherwise that code walks into the non-deleted
+                        insn stream.  */
+                     while (p && GET_CODE (p) == NOTE)
+                       p = NEXT_INSN (temp) = NEXT_INSN (p);
                    }
 
                  /* The more regs we move, the less we like moving them.  */
This page took 0.081147 seconds and 5 git commands to generate.