gcse.c (try_replace_reg): Use num_changes_pending.
authorJan Hubicka <jh@suse.cz>
Tue, 23 Jul 2002 12:08:10 +0000 (14:08 +0200)
committerGerald Pfeifer <gerald@gcc.gnu.org>
Tue, 23 Jul 2002 12:08:10 +0000 (12:08 +0000)
2002-07-23  Jan Hubicka  <jh@suse.cz>

* gcse.c (try_replace_reg): Use num_changes_pending.
* recog.c (num_changes_pending): New function.
(validate_replace_src): Use validate_repalce_src_group.
(validate_replace_src_group): New.
* recog.h (validate_repalce_src_group): New.
(num_changes_pending): Likewise.

From-SVN: r55677

gcc/ChangeLog
gcc/gcse.c
gcc/recog.c
gcc/recog.h

index 38059195fdffddd372347146b985dabf55e0d9a8..b66163379c3a7b148fa8c66507261dd4ae79d615 100644 (file)
@@ -1,3 +1,12 @@
+2002-07-23  Jan Hubicka  <jh@suse.cz>
+
+       * gcse.c (try_replace_reg): Use num_changes_pending.
+       * recog.c (num_changes_pending): New function.
+       (validate_replace_src): Use validate_repalce_src_group.
+       (validate_replace_src_group): New.
+       * recog.h (validate_repalce_src_group): New.
+       (num_changes_pending): Likewise.
+
 Tue Jul 23 12:16:58 2002  J"orn Rennecke <joern.rennecke@superh.com>
 
        * calls.c (emit_library_call_value_1): If
index 37fa2d610a17a13528cfa68c730ed4b0c4ab691f..620b98636be1e0058954e4ef7b33e52ba0fb0a70 100644 (file)
@@ -3977,10 +3977,9 @@ try_replace_reg (from, to, insn)
   int success = 0;
   rtx set = single_set (insn);
 
-  if (reg_mentioned_p (from, PATTERN (insn)))
-    {
-      success = validate_replace_src (from, to, insn);
-    }
+  validate_replace_src_group (from, to, insn);
+  if (num_changes_pending () && apply_change_group ())
+    success = 1;
 
   if (!success && set && reg_mentioned_p (from, SET_SRC (set)))
     {
index 5b5d3dc062a8b78be0cc18f0e2ecc300be17da6d..3769249154b84a0703753e952d5105fee7fb76c5 100644 (file)
@@ -308,6 +308,13 @@ insn_invalid_p (insn)
   return 0;
 }
 
+/* Return number of changes made and not validated yet.  */
+int
+num_changes_pending ()
+{
+  return num_changes;
+}
+
 /* Apply a group of changes previously issued with `validate_change'.
    Return 1 if all changes are valid, zero otherwise.  */
 
@@ -671,11 +678,10 @@ validate_replace_src_1 (x, data)
 }
 
 /* Try replacing every occurrence of FROM in INSN with TO, avoiding
-   SET_DESTs.  After all changes have been made, validate by seeing if
-   INSN is still valid.  */
+   SET_DESTs.  */
 
-int
-validate_replace_src (from, to, insn)
+void
+validate_replace_src_group (from, to, insn)
      rtx from, to, insn;
 {
   struct validate_replace_src_data d;
@@ -684,6 +690,15 @@ validate_replace_src (from, to, insn)
   d.to = to;
   d.insn = insn;
   note_uses (&PATTERN (insn), validate_replace_src_1, &d);
+}
+
+/* Same as validate_repalace_src_group, but validate by seeing if
+   INSN is still valid.  */
+int
+validate_replace_src (from, to, insn)
+     rtx from, to, insn;
+{
+  validate_replace_src_group (from, to, insn);
   return apply_change_group ();
 }
 \f
index 4d474405cd4f24693d1c07bb3548a9c74c7c0ea8..86af35f721f62083c8f90c86df410c13814a17d1 100644 (file)
@@ -89,6 +89,8 @@ extern int validate_replace_rtx_subexp        PARAMS ((rtx, rtx, rtx, rtx *));
 extern int validate_replace_rtx                PARAMS ((rtx, rtx, rtx));
 extern void validate_replace_rtx_group PARAMS ((rtx, rtx, rtx));
 extern int validate_replace_src                PARAMS ((rtx, rtx, rtx));
+extern void validate_replace_src_group PARAMS ((rtx, rtx, rtx));
+extern int num_changes_pending         PARAMS ((void));
 #ifdef HAVE_cc0
 extern int next_insn_tests_no_inequality PARAMS ((rtx));
 #endif