]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
dump reasons why graphite failed to detect a scop
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 25 Jul 2015 09:22:29 +0000 (09:22 +0000)
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 25 Jul 2015 09:22:29 +0000 (09:22 +0000)
When trying to analyze why Graphite does not handle a loop nest, it is easy to
look in the dumps of -fdump-tree-graphite-all to guess what has to be changed to
catch the loop.  This patch makes the dumps a bit more verbose and useful.

* graphite-scop-detection.c: Include gimple-pretty-print.h.
(stmt_simple_for_scop_p): Print when a stmt is not handled in Graphite.
(scopdet_basic_block_info): Print when a loop or bb cannot be
represented in Graphite.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@226213 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/graphite-scop-detection.c

index 60c4adec35fc43542e986d137ab817cd73f28c6a..04f7faba4bdeb0366c853d2ef1e49fbe933d94b7 100644 (file)
@@ -1,3 +1,11 @@
+2015-07-25  Sebastian Pop  <s.pop@samsung.com>
+
+       * graphite-scop-detection.c: Include gimple-pretty-print.h.
+       (stmt_simple_for_scop_p): Print when a stmt is not handled in
+       Graphite.
+       (scopdet_basic_block_info): Print when a loop or bb cannot be
+       represented in Graphite.
+
 2015-07-25  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/66648
index 686f4956e1e9ff77d507ab080856050195cdfcb9..fb7247e2e77481260f51f5a490075fe6f872a2c2 100644 (file)
@@ -51,6 +51,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "graphite-poly.h"
 #include "tree-ssa-propagate.h"
 #include "graphite-scop-detection.h"
+#include "gimple-pretty-print.h"
 
 /* Forward declarations.  */
 static void make_close_phi_nodes_unique (basic_block);
@@ -350,13 +351,31 @@ stmt_simple_for_scop_p (basic_block scop_entry, loop_p outermost_loop,
       || (gimple_code (stmt) == GIMPLE_CALL
          && !(gimple_call_flags (stmt) & (ECF_CONST | ECF_PURE)))
       || (gimple_code (stmt) == GIMPLE_ASM))
-    return false;
+    {
+      if (dump_file && (dump_flags & TDF_DETAILS))
+       {
+         fprintf (dump_file, "[scop-detection-fail] ");
+         fprintf (dump_file, "Graphite cannot handle this stmt:\n");
+         print_gimple_stmt (dump_file, stmt, 0, TDF_VOPS|TDF_MEMSYMS);
+       }
+
+      return false;
+    }
 
   if (is_gimple_debug (stmt))
     return true;
 
   if (!stmt_has_simple_data_refs_p (outermost_loop, stmt))
-    return false;
+    {
+      if (dump_file && (dump_flags & TDF_DETAILS))
+       {
+         fprintf (dump_file, "[scop-detection-fail] ");
+         fprintf (dump_file, "Graphite cannot handle data-refs in stmt:\n");
+         print_gimple_stmt (dump_file, stmt, 0, TDF_VOPS|TDF_MEMSYMS);
+       }
+
+      return false;
+    }
 
   switch (gimple_code (stmt))
     {
@@ -375,7 +394,16 @@ stmt_simple_for_scop_p (basic_block scop_entry, loop_p outermost_loop,
              || code == GE_EXPR
              || code == EQ_EXPR
              || code == NE_EXPR))
-          return false;
+          {
+           if (dump_file && (dump_flags & TDF_DETAILS))
+             {
+               fprintf (dump_file, "[scop-detection-fail] ");
+               fprintf (dump_file, "Graphite cannot handle cond stmt:\n");
+               print_gimple_stmt (dump_file, stmt, 0, TDF_VOPS|TDF_MEMSYMS);
+             }
+
+           return false;
+         }
 
        for (unsigned i = 0; i < 2; ++i)
          {
@@ -383,7 +411,16 @@ stmt_simple_for_scop_p (basic_block scop_entry, loop_p outermost_loop,
            if (!graphite_can_represent_expr (scop_entry, loop, op)
                /* We can not handle REAL_TYPE. Failed for pr39260.  */
                || TREE_CODE (TREE_TYPE (op)) == REAL_TYPE)
-             return false;
+             {
+               if (dump_file && (dump_flags & TDF_DETAILS))
+                 {
+                   fprintf (dump_file, "[scop-detection-fail] ");
+                   fprintf (dump_file, "Graphite cannot represent stmt:\n");
+                   print_gimple_stmt (dump_file, stmt, 0, TDF_VOPS|TDF_MEMSYMS);
+                 }
+
+               return false;
+             }
          }
 
        return true;
@@ -395,6 +432,12 @@ stmt_simple_for_scop_p (basic_block scop_entry, loop_p outermost_loop,
 
     default:
       /* These nodes cut a new scope.  */
+      if (dump_file && (dump_flags & TDF_DETAILS))
+       {
+         fprintf (dump_file, "[scop-detection-fail] ");
+         fprintf (dump_file, "Gimple stmt not handled in Graphite:\n");
+         print_gimple_stmt (dump_file, stmt, 0, TDF_VOPS|TDF_MEMSYMS);
+       }
       return false;
     }
 
@@ -488,7 +531,16 @@ scopdet_basic_block_info (basic_block bb, loop_p outermost_loop,
         with make_forwarder_block.  */
       if (!single_succ_p (bb)
          || bb_has_abnormal_pred (single_succ (bb)))
-       result.difficult = true;
+       {
+         if (dump_file && (dump_flags & TDF_DETAILS))
+           {
+             fprintf (dump_file, "[scop-detection-fail] ");
+             fprintf (dump_file, "BB %d cannot be part of a scop.\n",
+                      bb->index);
+           }
+
+         result.difficult = true;
+       }
       else
        result.exit = single_succ (bb);
 
@@ -509,7 +561,15 @@ scopdet_basic_block_info (basic_block bb, loop_p outermost_loop,
        sinfo = build_scops_1 (bb, outermost_loop, &regions, loop);
 
        if (!graphite_can_represent_loop (entry_block, loop))
-         result.difficult = true;
+         {
+           if (dump_file && (dump_flags & TDF_DETAILS))
+             {
+               fprintf (dump_file, "[scop-detection-fail] ");
+               fprintf (dump_file, "Graphite cannot represent loop %d.\n",
+                        loop->num);
+             }
+           result.difficult = true;
+         }
 
        result.difficult |= sinfo.difficult;