combine: Print to dump if some insn cannot be combined into i3
authorSegher Boessenkool <segher@kernel.crashing.org>
Wed, 29 Nov 2017 22:51:16 +0000 (23:51 +0100)
committerSegher Boessenkool <segher@gcc.gnu.org>
Wed, 29 Nov 2017 22:51:16 +0000 (23:51 +0100)
Eventually we should print the reason that any combination fails.
This is a good start (these happen often).

* combine.c (try_combine): Print a message to dump file whenever
I0, I1, or I2 cannot be combined into I3.

From-SVN: r255261

gcc/ChangeLog
gcc/combine.c

index c13f67e76a6e724773144d69d41c673861832b73..d1838f19d6efd3fc0848fe6e802fa3162ad4a63f 100644 (file)
@@ -1,3 +1,8 @@
+2017-11-29  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * combine.c (try_combine): Print a message to dump file whenever
+       I0, I1, or I2 cannot be combined into I3.
+
 2017-11-29  Segher Boessenkool  <segher@kernel.crashing.org>
 
        PR rtl-optimization/83156
index cfe24f42633840957f46c57d063b7723f63b721e..863abd7a282b02183a18f4ab14eefa7b64a61b61 100644 (file)
@@ -3035,13 +3035,25 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
       SUBST (PATTERN (i2), XVECEXP (PATTERN (i2), 0, 1));
     }
 
-  /* Verify that I2 and I1 are valid for combining.  */
-  if (! can_combine_p (i2, i3, i0, i1, NULL, NULL, &i2dest, &i2src)
-      || (i1 && ! can_combine_p (i1, i3, i0, NULL, i2, NULL,
-                                &i1dest, &i1src))
-      || (i0 && ! can_combine_p (i0, i3, NULL, NULL, i1, i2,
-                                &i0dest, &i0src)))
+  /* Verify that I2 and maybe I1 and I0 can be combined into I3.  */
+  if (!can_combine_p (i2, i3, i0, i1, NULL, NULL, &i2dest, &i2src))
     {
+      if (dump_file)
+       fprintf (dump_file, "Can't combine i2 into i3\n");
+      undo_all ();
+      return 0;
+    }
+  if (i1 && !can_combine_p (i1, i3, i0, NULL, i2, NULL, &i1dest, &i1src))
+    {
+      if (dump_file)
+       fprintf (dump_file, "Can't combine i1 into i3\n");
+      undo_all ();
+      return 0;
+    }
+  if (i0 && !can_combine_p (i0, i3, NULL, NULL, i1, i2, &i0dest, &i0src))
+    {
+      if (dump_file)
+       fprintf (dump_file, "Can't combine i0 into i3\n");
       undo_all ();
       return 0;
     }