aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/combine.c12
2 files changed, 20 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0465625..d484572 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2000-01-31 Chandra Chavva <cchavva@cygnus.com>
+
+ * combine.c (try_combine) [HAVE_cc0]: Trying to check the missed
+ case 3->2 combining (combining with splitting) in which 2 is CC0
+ setter/user and 3 is user. The rest of cases 2->1 and 3->2 are
+ checked at the begining of the function with the aid of calling
+ function 'can_combine_p'.
+
2000-01-31 Dave Brolley <brolley@redhat.com>
* cccp.c (struct argdata): Redeclare 'newlines' field as 'int'.
diff --git a/gcc/combine.c b/gcc/combine.c
index 8d578eb..62722c8 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -2391,6 +2391,18 @@ try_combine (i3, i2, i1)
distribute_notes (new_other_notes, undobuf.other_insn,
undobuf.other_insn, NULL_RTX, NULL_RTX, NULL_RTX);
}
+#ifdef HAVE_cc0
+ /* If I2 is the setter CC0 and I3 is the user CC0 then check whether
+ they are adjacent to each other or not. */
+ {
+ rtx p = prev_nonnote_insn (i3);
+ if (p && p != i2 && GET_CODE (p) == INSN && newi2pat && sets_cc0_p (newi2pat))
+ {
+ undo_all ();
+ return 0;
+ }
+ }
+#endif
/* We now know that we can do this combination. Merge the insns and
update the status of registers and LOG_LINKS. */