From 1bcc1e4102b64d93441c0318c537a182923c331b Mon Sep 17 00:00:00 2001 From: Segher Boessenkool 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 d3739c2d41d..58b5fc34b32 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-05-12 Segher Boessenkool + + * 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 PR tree-optimization/66101 diff --git a/gcc/combine.c b/gcc/combine.c index 274a2d93dbb..4b6e39f4442 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 -- 2.30.2