From 1bcc1e4102b64d93441c0318c537a182923c331b Mon Sep 17 00:00:00 2001
From: Segher Boessenkool <segher@kernel.crashing.org>
Date: Tue, 12 May 2015 15:37:53 +0200
Subject: [PATCH] combine.c (get_undo_marker): New function.

	* combine.c (get_undo_marker): New function.
	(undo_to_marker): New function, largely factored out from ...
	(undo_all): ... this.  Adjust.

From-SVN: r223066
---
 gcc/ChangeLog |  6 ++++++
 gcc/combine.c | 26 ++++++++++++++++++++++----
 2 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d3739c2d41db..58b5fc34b320 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-05-12  Segher Boessenkool  <segher@kernel.crashing.org>
+
+	* combine.c (get_undo_marker): New function.
+	(undo_to_marker): New function, largely factored out from ...
+	(undo_all): ... this.  Adjust.
+
 2015-05-12  Richard Biener  <rguenther@suse.de>
 
 	PR tree-optimization/66101
diff --git a/gcc/combine.c b/gcc/combine.c
index 274a2d93dbbd..4b6e39f4442b 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -4673,15 +4673,25 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
     return newi2pat ? i2 : i3;
 }
 
-/* Undo all the modifications recorded in undobuf.  */
+/* Get a marker for undoing to the current state.  */
+
+static void *
+get_undo_marker (void)
+{
+  return undobuf.undos;
+}
+
+/* Undo the modifications up to the marker.  */
 
 static void
-undo_all (void)
+undo_to_marker (void *marker)
 {
   struct undo *undo, *next;
 
-  for (undo = undobuf.undos; undo; undo = next)
+  for (undo = undobuf.undos; undo != marker; undo = next)
     {
+      gcc_assert (undo);
+
       next = undo->next;
       switch (undo->kind)
 	{
@@ -4705,7 +4715,15 @@ undo_all (void)
       undobuf.frees = undo;
     }
 
-  undobuf.undos = 0;
+  undobuf.undos = (struct undo *) marker;
+}
+
+/* Undo all the modifications recorded in undobuf.  */
+
+static void
+undo_all (void)
+{
+  undo_to_marker (0);
 }
 
 /* We've committed to accepting the changes we made.  Move all
-- 
GitLab