Output the cost calculation always, not only when the costs disallow
a combination.  Checking if your port has sane costs is much easier
this way.

Also there is no point in printing full lines at once; debug dumps
are never translated, so we can print piece by piece.


2014-11-14  Segher Boessenkool  <seg...@kernel.crashing.org>

gcc/
        * combine.c (combine_validate_cost): Always print the insn costs
        to the dump file.

---
 gcc/combine.c | 63 ++++++++++++++++++++++++-----------------------------------
 1 file changed, 25 insertions(+), 38 deletions(-)

diff --git a/gcc/combine.c b/gcc/combine.c
index e240cfb..f7797e7 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -914,48 +914,35 @@ combine_validate_cost (rtx_insn *i0, rtx_insn *i1, 
rtx_insn *i2, rtx_insn *i3,
 
   /* Disallow this combination if both new_cost and old_cost are greater than
      zero, and new_cost is greater than old cost.  */
-  if (old_cost > 0 && new_cost > old_cost)
-    {
-      if (dump_file)
-       {
-         if (i0)
-           {
-             fprintf (dump_file,
-                      "rejecting combination of insns %d, %d, %d and %d\n",
-                      INSN_UID (i0), INSN_UID (i1), INSN_UID (i2),
-                      INSN_UID (i3));
-             fprintf (dump_file, "original costs %d + %d + %d + %d = %d\n",
-                      i0_cost, i1_cost, i2_cost, i3_cost, old_cost);
-           }
-         else if (i1)
-           {
-             fprintf (dump_file,
-                      "rejecting combination of insns %d, %d and %d\n",
-                      INSN_UID (i1), INSN_UID (i2), INSN_UID (i3));
-             fprintf (dump_file, "original costs %d + %d + %d = %d\n",
-                      i1_cost, i2_cost, i3_cost, old_cost);
-           }
-         else
-           {
-             fprintf (dump_file,
-                      "rejecting combination of insns %d and %d\n",
-                      INSN_UID (i2), INSN_UID (i3));
-             fprintf (dump_file, "original costs %d + %d = %d\n",
-                      i2_cost, i3_cost, old_cost);
-           }
+  int reject = old_cost > 0 && new_cost > old_cost;
 
-         if (newi2pat)
-           {
-             fprintf (dump_file, "replacement costs %d + %d = %d\n",
-                      new_i2_cost, new_i3_cost, new_cost);
-           }
-         else
-           fprintf (dump_file, "replacement cost %d\n", new_cost);
-       }
+  if (dump_file)
+    {
+      fprintf (dump_file, "%s combination of insns ",
+              reject ? "rejecting" : "allowing");
+      if (i0)
+       fprintf (dump_file, "%d, ", INSN_UID (i0));
+      if (i1)
+       fprintf (dump_file, "%d, ", INSN_UID (i1));
+      fprintf (dump_file, "%d and %d\n", INSN_UID (i2), INSN_UID (i3));
 
-      return false;
+      fprintf (dump_file, "original costs ");
+      if (i0)
+       fprintf (dump_file, "%d + ", i0_cost);
+      if (i1)
+       fprintf (dump_file, "%d + ", i1_cost);
+      fprintf (dump_file, "%d + %d = %d\n", i2_cost, i3_cost, old_cost);
+
+      if (newi2pat)
+       fprintf (dump_file, "replacement costs %d + %d = %d\n",
+                new_i2_cost, new_i3_cost, new_cost);
+      else
+       fprintf (dump_file, "replacement cost %d\n", new_cost);
     }
 
+  if (reject)
+    return false;
+
   /* Update the uid_insn_cost array with the replacement costs.  */
   INSN_COST (i2) = new_i2_cost;
   INSN_COST (i3) = new_i3_cost;
-- 
1.8.1.4

Reply via email to