[v3,2/2,RFC] Add debugging for move history.

Message ID 20241030141749.4029995-3-qing.zhao@oracle.com
State New
Headers
Series Provide more contexts for -Warray-bounds warning messages |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm fail Patch failed to apply
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 fail Patch failed to apply

Commit Message

Qing Zhao Oct. 30, 2024, 2:17 p.m. UTC
  gcc/ChangeLog:

	* diagnostic-move-history.cc (dump_move_history): New routine.
	(dump_move_history_for): Likewise.
	(debug_mv_h): Likewise.
	* diagnostic-move-history.h (dump_move_history): New prototype.
	(dump_move_history_for): Likewise.
	* gimple-ssa-isolate-paths.cc (isolate_path): Add debugging message
	when setting move history for statements.
	* tree-ssa-sink.cc (sink_code_in_bb): Likewise.
	* tree-ssa-threadupdate.cc (ssa_redirect_edges): Likewise.
	(back_jt_path_registry::duplicate_thread_path): Likewise.
---
 gcc/diagnostic-move-history.cc  | 67 +++++++++++++++++++++++++++++++++
 gcc/diagnostic-move-history.h   |  2 +
 gcc/gimple-ssa-isolate-paths.cc | 10 +++++
 gcc/tree-ssa-sink.cc            |  3 ++
 gcc/tree-ssa-threadupdate.cc    | 18 +++++++++
 5 files changed, 100 insertions(+)
  

Comments

Sam James Oct. 30, 2024, 5:52 p.m. UTC | #1
Qing Zhao <qing.zhao@oracle.com> writes:

> gcc/ChangeLog:
>
> 	* diagnostic-move-history.cc (dump_move_history): New routine.
> 	(dump_move_history_for): Likewise.
> 	(debug_mv_h): Likewise.
> 	* diagnostic-move-history.h (dump_move_history): New prototype.
> 	(dump_move_history_for): Likewise.
> 	* gimple-ssa-isolate-paths.cc (isolate_path): Add debugging message
> 	when setting move history for statements.
> 	* tree-ssa-sink.cc (sink_code_in_bb): Likewise.
> 	* tree-ssa-threadupdate.cc (ssa_redirect_edges): Likewise.
> 	(back_jt_path_registry::duplicate_thread_path): Likewise.
> ---
>  gcc/diagnostic-move-history.cc  | 67 +++++++++++++++++++++++++++++++++
>  gcc/diagnostic-move-history.h   |  2 +
>  gcc/gimple-ssa-isolate-paths.cc | 10 +++++
>  gcc/tree-ssa-sink.cc            |  3 ++
>  gcc/tree-ssa-threadupdate.cc    | 18 +++++++++
>  5 files changed, 100 insertions(+)
>
> diff --git a/gcc/diagnostic-move-history.cc b/gcc/diagnostic-move-history.cc
> index b0e8308dbf6b..e4c471ab50f3 100644
> --- a/gcc/diagnostic-move-history.cc
> +++ b/gcc/diagnostic-move-history.cc
> @@ -24,6 +24,7 @@
>  #include "backend.h"
>  #include "tree.h"
>  #include "gimple.h"
> +#include "tree-pretty-print.h"
>  #include "gimple-iterator.h"
>  #include "cfganal.h"
>  #include "diagnostic-move-history.h"
> @@ -262,3 +263,69 @@ set_move_history_to_stmts_in_bb (basic_block bb, edge entry,
>  
>    return true;
>  }
> +
> +/* Dump the move_history data structure MV_HISTORY.  */
> +
> +void
> +dump_move_history (FILE *file, move_history_t mv_history)
> +{
> +  fprintf (file, "The move history is: \n");

"is:\n"

> +  if (!mv_history)
> +    {
> +      fprintf (file, "No move history.\n");
> +      return;
> +    }
> +
> +  for (move_history_t cur_ch = mv_history; cur_ch;
> +       cur_ch = cur_ch->prev_move)
> +    {
> +      expanded_location exploc_cond = expand_location (cur_ch->condition);
> +
> +      if (exploc_cond.file)
> +	fprintf (file, "[%s:", exploc_cond.file);
> +      fprintf (file, "%d, ", exploc_cond.line);
> +      fprintf (file, "%d] ", exploc_cond.column);
> +
> +      fprintf (file, "%s ", cur_ch->is_true_path ? "true" : "false");
> +      const char *reason = NULL;
> +      switch (cur_ch->reason)
> +	{
> +	case COPY_BY_THREAD_JUMP:
> +	  reason = "copy_by_thread_jump";
> +	  break;
> +	case COPY_BY_ISOLATE_PATH:
> +	  reason = "copy_by_isolate_path";
> +	  break;
> +	case MOVE_BY_SINK:
> +	  reason = "move_by_sink";
> +	  break;
> +	default:
> +	  reason = "UNKNOWN";
> +	  break;
> +	}
> +      fprintf (file, "%s \n", reason);

"s\n"

> +    }
> +}
> +
> +/* Dump the move_history date structure attached to the gimple STMT.  */

date -> data

> +void
> +dump_move_history_for (FILE *file, const gimple *stmt)
> +{
> +  move_history_t mv_history = get_move_history (stmt);
> +  if (!mv_history)
> +    fprintf (file, "No move history.\n");
> +  else
> +    dump_move_history (file, mv_history);
> +}
> +
> +DEBUG_FUNCTION void
> +debug_mv_h (const move_history_t mv_history)
> +{
> +  dump_move_history (stderr, mv_history);
> +}
> +
> +DEBUG_FUNCTION void
> +debug_mv_h (const gimple * stmt)
> +{
> +  dump_move_history_for (stderr, stmt);
> +}
> [...]
  
Qing Zhao Oct. 31, 2024, 12:22 p.m. UTC | #2
Thanks. 
Will fix them in the next version.

Qing

> On Oct 30, 2024, at 13:52, Sam James <sam@gentoo.org> wrote:
> 
> Qing Zhao <qing.zhao@oracle.com> writes:
> 
>> gcc/ChangeLog:
>> 
>> * diagnostic-move-history.cc (dump_move_history): New routine.
>> (dump_move_history_for): Likewise.
>> (debug_mv_h): Likewise.
>> * diagnostic-move-history.h (dump_move_history): New prototype.
>> (dump_move_history_for): Likewise.
>> * gimple-ssa-isolate-paths.cc (isolate_path): Add debugging message
>> when setting move history for statements.
>> * tree-ssa-sink.cc (sink_code_in_bb): Likewise.
>> * tree-ssa-threadupdate.cc (ssa_redirect_edges): Likewise.
>> (back_jt_path_registry::duplicate_thread_path): Likewise.
>> ---
>> gcc/diagnostic-move-history.cc  | 67 +++++++++++++++++++++++++++++++++
>> gcc/diagnostic-move-history.h   |  2 +
>> gcc/gimple-ssa-isolate-paths.cc | 10 +++++
>> gcc/tree-ssa-sink.cc            |  3 ++
>> gcc/tree-ssa-threadupdate.cc    | 18 +++++++++
>> 5 files changed, 100 insertions(+)
>> 
>> diff --git a/gcc/diagnostic-move-history.cc b/gcc/diagnostic-move-history.cc
>> index b0e8308dbf6b..e4c471ab50f3 100644
>> --- a/gcc/diagnostic-move-history.cc
>> +++ b/gcc/diagnostic-move-history.cc
>> @@ -24,6 +24,7 @@
>> #include "backend.h"
>> #include "tree.h"
>> #include "gimple.h"
>> +#include "tree-pretty-print.h"
>> #include "gimple-iterator.h"
>> #include "cfganal.h"
>> #include "diagnostic-move-history.h"
>> @@ -262,3 +263,69 @@ set_move_history_to_stmts_in_bb (basic_block bb, edge entry,
>> 
>>   return true;
>> }
>> +
>> +/* Dump the move_history data structure MV_HISTORY.  */
>> +
>> +void
>> +dump_move_history (FILE *file, move_history_t mv_history)
>> +{
>> +  fprintf (file, "The move history is: \n");
> 
> "is:\n"
> 
>> +  if (!mv_history)
>> +    {
>> +      fprintf (file, "No move history.\n");
>> +      return;
>> +    }
>> +
>> +  for (move_history_t cur_ch = mv_history; cur_ch;
>> +       cur_ch = cur_ch->prev_move)
>> +    {
>> +      expanded_location exploc_cond = expand_location (cur_ch->condition);
>> +
>> +      if (exploc_cond.file)
>> + fprintf (file, "[%s:", exploc_cond.file);
>> +      fprintf (file, "%d, ", exploc_cond.line);
>> +      fprintf (file, "%d] ", exploc_cond.column);
>> +
>> +      fprintf (file, "%s ", cur_ch->is_true_path ? "true" : "false");
>> +      const char *reason = NULL;
>> +      switch (cur_ch->reason)
>> + {
>> + case COPY_BY_THREAD_JUMP:
>> +   reason = "copy_by_thread_jump";
>> +   break;
>> + case COPY_BY_ISOLATE_PATH:
>> +   reason = "copy_by_isolate_path";
>> +   break;
>> + case MOVE_BY_SINK:
>> +   reason = "move_by_sink";
>> +   break;
>> + default:
>> +   reason = "UNKNOWN";
>> +   break;
>> + }
>> +      fprintf (file, "%s \n", reason);
> 
> "s\n"
> 
>> +    }
>> +}
>> +
>> +/* Dump the move_history date structure attached to the gimple STMT.  */
> 
> date -> data
> 
>> +void
>> +dump_move_history_for (FILE *file, const gimple *stmt)
>> +{
>> +  move_history_t mv_history = get_move_history (stmt);
>> +  if (!mv_history)
>> +    fprintf (file, "No move history.\n");
>> +  else
>> +    dump_move_history (file, mv_history);
>> +}
>> +
>> +DEBUG_FUNCTION void
>> +debug_mv_h (const move_history_t mv_history)
>> +{
>> +  dump_move_history (stderr, mv_history);
>> +}
>> +
>> +DEBUG_FUNCTION void
>> +debug_mv_h (const gimple * stmt)
>> +{
>> +  dump_move_history_for (stderr, stmt);
>> +}
>> [...]
  

Patch

diff --git a/gcc/diagnostic-move-history.cc b/gcc/diagnostic-move-history.cc
index b0e8308dbf6b..e4c471ab50f3 100644
--- a/gcc/diagnostic-move-history.cc
+++ b/gcc/diagnostic-move-history.cc
@@ -24,6 +24,7 @@ 
 #include "backend.h"
 #include "tree.h"
 #include "gimple.h"
+#include "tree-pretty-print.h"
 #include "gimple-iterator.h"
 #include "cfganal.h"
 #include "diagnostic-move-history.h"
@@ -262,3 +263,69 @@  set_move_history_to_stmts_in_bb (basic_block bb, edge entry,
 
   return true;
 }
+
+/* Dump the move_history data structure MV_HISTORY.  */
+
+void
+dump_move_history (FILE *file, move_history_t mv_history)
+{
+  fprintf (file, "The move history is: \n");
+  if (!mv_history)
+    {
+      fprintf (file, "No move history.\n");
+      return;
+    }
+
+  for (move_history_t cur_ch = mv_history; cur_ch;
+       cur_ch = cur_ch->prev_move)
+    {
+      expanded_location exploc_cond = expand_location (cur_ch->condition);
+
+      if (exploc_cond.file)
+	fprintf (file, "[%s:", exploc_cond.file);
+      fprintf (file, "%d, ", exploc_cond.line);
+      fprintf (file, "%d] ", exploc_cond.column);
+
+      fprintf (file, "%s ", cur_ch->is_true_path ? "true" : "false");
+      const char *reason = NULL;
+      switch (cur_ch->reason)
+	{
+	case COPY_BY_THREAD_JUMP:
+	  reason = "copy_by_thread_jump";
+	  break;
+	case COPY_BY_ISOLATE_PATH:
+	  reason = "copy_by_isolate_path";
+	  break;
+	case MOVE_BY_SINK:
+	  reason = "move_by_sink";
+	  break;
+	default:
+	  reason = "UNKNOWN";
+	  break;
+	}
+      fprintf (file, "%s \n", reason);
+    }
+}
+
+/* Dump the move_history date structure attached to the gimple STMT.  */
+void
+dump_move_history_for (FILE *file, const gimple *stmt)
+{
+  move_history_t mv_history = get_move_history (stmt);
+  if (!mv_history)
+    fprintf (file, "No move history.\n");
+  else
+    dump_move_history (file, mv_history);
+}
+
+DEBUG_FUNCTION void
+debug_mv_h (const move_history_t mv_history)
+{
+  dump_move_history (stderr, mv_history);
+}
+
+DEBUG_FUNCTION void
+debug_mv_h (const gimple * stmt)
+{
+  dump_move_history_for (stderr, stmt);
+}
diff --git a/gcc/diagnostic-move-history.h b/gcc/diagnostic-move-history.h
index cac9cb1e2675..0133f379dbbd 100644
--- a/gcc/diagnostic-move-history.h
+++ b/gcc/diagnostic-move-history.h
@@ -88,5 +88,7 @@  extern bool set_move_history_to_stmt (gimple *, edge,
    of the entry edge.  */
 extern bool set_move_history_to_stmts_in_bb (basic_block, edge,
 					     bool, enum move_reason);
+extern void dump_move_history (FILE *, move_history_t);
+extern void dump_move_history_for (FILE *, const gimple *);
 
 #endif // DIAGNOSTIC_MOVE_HISTORY_H_INCLUDED
diff --git a/gcc/gimple-ssa-isolate-paths.cc b/gcc/gimple-ssa-isolate-paths.cc
index a79b512f63bd..0a6520ee8311 100644
--- a/gcc/gimple-ssa-isolate-paths.cc
+++ b/gcc/gimple-ssa-isolate-paths.cc
@@ -176,6 +176,16 @@  isolate_path (basic_block bb, basic_block duplicate,
      incoming edge.  */
   if (flag_diagnostics_details)
     {
+      if (dump_file)
+	{
+	  fprintf (dump_file, "Set move history for stmts of B[%d]"
+		   " as not on the destination of the edge\n",
+		   bb->index);
+	  fprintf (dump_file, "Set move history for stmts of B[%d]"
+		   " as on the destination of the edge\n",
+		   duplicate->index);
+	}
+
       set_move_history_to_stmts_in_bb (bb, e, false, COPY_BY_ISOLATE_PATH);
       set_move_history_to_stmts_in_bb (duplicate, e,
 				       true, COPY_BY_ISOLATE_PATH);
diff --git a/gcc/tree-ssa-sink.cc b/gcc/tree-ssa-sink.cc
index 2fddb1a63268..e7ee445feb69 100644
--- a/gcc/tree-ssa-sink.cc
+++ b/gcc/tree-ssa-sink.cc
@@ -718,6 +718,9 @@  sink_code_in_bb (basic_block bb, virtual_operand_live &vop_live)
 	{
 	  edge entry = find_edge (bb, gsi_bb (togsi));
 	  set_move_history_to_stmt (stmt, entry, true, MOVE_BY_SINK);
+	  if (dump_file)
+	    fprintf (dump_file, " Set move history for the stmt"
+		     " as on the destination of the edge\n");
 	}
 
       /* Update virtual operands of statements in the path we
diff --git a/gcc/tree-ssa-threadupdate.cc b/gcc/tree-ssa-threadupdate.cc
index 4f5a878686f1..a6bbf2fa9e86 100644
--- a/gcc/tree-ssa-threadupdate.cc
+++ b/gcc/tree-ssa-threadupdate.cc
@@ -1348,6 +1348,15 @@  ssa_redirect_edges (struct redirection_data **slot,
 	     incoming edge.  */
 	  if (flag_diagnostics_details)
 	    {
+	      if (dump_file && (dump_flags & TDF_DETAILS))
+		{
+		  fprintf (dump_file, "Set move history for stmts of B[%d]"
+			   " as not on the destination of the edge\n",
+			   e->dest->index);
+		  fprintf (dump_file, "Set move history for stmts of B[%d]"
+			   " as on the destination of the edge\n",
+			   rd->dup_blocks[0]->index);
+		}
 	      set_move_history_to_stmts_in_bb (e->dest, e, false,
 					       COPY_BY_THREAD_JUMP);
 	      set_move_history_to_stmts_in_bb (rd->dup_blocks[0], e,
@@ -2438,6 +2447,15 @@  back_jt_path_registry::duplicate_thread_path (edge entry,
   for (i = 0; i < n_region; i++)
     if (flag_diagnostics_details)
       {
+	if (dump_file && (dump_flags & TDF_DETAILS))
+	  {
+	    fprintf (dump_file, "Set move history for stmts of B[%d]"
+		     " as not on the destination of the edge\n",
+		     region[i]->index);
+	    fprintf (dump_file, "Set move history for stmts of B[%d]"
+		     " as on the destination of the edge\n",
+		     region_copy[i]->index);
+	  }
 	set_move_history_to_stmts_in_bb (region[i], entry, false,
 					 COPY_BY_THREAD_JUMP);
 	set_move_history_to_stmts_in_bb (region_copy[i], entry,