OSDN Git Service

gcc:
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 17 Jul 2006 14:44:48 +0000 (14:44 +0000)
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 17 Jul 2006 14:44:48 +0000 (14:44 +0000)
PR other/28251
* tree.h (dump_addr): Declare.
* print-tree.c (dump_addr): New function.
(print_node_brief, print_node): Use it.
* print-rtl.c (print_rtx): Likewise.
* common.opt (-fdump-noaddr): New option.
* doc/invoke.texi (-fdump-noaddr): Document.
* loop-unroll.c (si_info_hash): Make hash independent of addresses.
(ve_info_hash): Likewise.
gcc/testsuite:
PR other/28251
gcc.c-torture/unsorted/dump-noaddr.c: New test.
gcc.c-torture/unsorted/dump-noaddr.x: New driver.

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

gcc/ChangeLog
gcc/common.opt
gcc/doc/invoke.texi
gcc/loop-unroll.c
gcc/print-rtl.c
gcc/print-tree.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/unsorted/dump-noaddr.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/unsorted/dump-noaddr.x [new file with mode: 0644]
gcc/tree.h

index 0ff6fa3..3262d05 100644 (file)
@@ -1,3 +1,15 @@
+2006-07-17  J"orn Rennecke  <joern.rennecke@st.com>
+
+       PR other/28251
+       * tree.h (dump_addr): Declare.
+       * print-tree.c (dump_addr): New function.
+       (print_node_brief, print_node): Use it.
+       * print-rtl.c (print_rtx): Likewise.
+       * common.opt (-fdump-noaddr): New option.
+       * doc/invoke.texi (-fdump-noaddr): Document.
+       * loop-unroll.c (si_info_hash): Make hash independent of addresses.
+       (ve_info_hash): Likewise.
+
 2006-07-13  Andrew Haley  <aph@redhat.com>
 
        PR tree-optimization/19505
index 3c5fc0e..204560f 100644 (file)
@@ -381,9 +381,13 @@ fdump-
 Common Joined RejectNegative
 -fdump-<type>  Dump various compiler internals to a file
 
+fdump-noaddr
+Common Report Var(flag_dump_noaddr)
+Suppress output of addresses in debugging dumps
+
 fdump-unnumbered
 Common Report Var(flag_dump_unnumbered) VarExists
-Suppress output of instruction numbers and line number notes in debugging dumps
+Suppress output of instruction numbers, line number notes and addresses in debugging dumps
 
 fearly-inlining
 Common Report Var(flag_early_inlining) Init(1)
index 0a1a917..32fe747 100644 (file)
@@ -262,7 +262,7 @@ Objective-C and Objective-C++ Dialects}.
 @item Debugging Options
 @xref{Debugging Options,,Options for Debugging Your Program or GCC}.
 @gccoptlist{-d@var{letters}  -dumpspecs  -dumpmachine  -dumpversion @gol
--fdump-unnumbered  -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
+-fdump-noaddr -fdump-unnumbered  -fdump-translation-unit@r{[}-@var{n}@r{]} @gol
 -fdump-class-hierarchy@r{[}-@var{n}@r{]} @gol
 -fdump-ipa-all -fdump-ipa-cgraph @gol
 -fdump-tree-all @gol
@@ -4005,10 +4005,17 @@ with @samp{r} (@option{-fdump-rtl-expand}).
 Dump debugging information during parsing, to standard error.
 @end table
 
+@item -fdump-noaddr
+@opindex fdump-noaddr
+When doing debugging dumps (see @option{-d} option above), suppress
+address output.  This makes it more feasible to use diff on debugging
+dumps for compiler invocations with different compiler binaries and/or
+different text / bss / data / heap / stack / dso start locations.
+
 @item -fdump-unnumbered
 @opindex fdump-unnumbered
 When doing debugging dumps (see @option{-d} option above), suppress instruction
-numbers and line number note output.  This makes it more feasible to
+numbers, line number note and address output.  This makes it more feasible to
 use diff on debugging dumps for compiler invocations with different
 options, in particular with and without @option{-g}.
 
index 156f688..711b021 100644 (file)
@@ -1466,7 +1466,7 @@ unroll_loop_stupid (struct loops *loops, struct loop *loop)
 static hashval_t
 si_info_hash (const void *ivts)
 {
-  return htab_hash_pointer (((struct iv_to_split *) ivts)->insn);
+  return (hashval_t) INSN_UID (((struct iv_to_split *) ivts)->insn);
 }
 
 /* An equality functions for information about insns to split.  */
@@ -1485,7 +1485,7 @@ si_info_eq (const void *ivts1, const void *ivts2)
 static hashval_t
 ve_info_hash (const void *ves)
 {
-  return htab_hash_pointer (((struct var_to_expand *) ves)->insn);
+  return (hashval_t) INSN_UID (((struct var_to_expand *) ves)->insn);
 }
 
 /* Return true if IVTS1 and IVTS2 (which are really both of type 
index 73e3710..a9c1a93 100644 (file)
@@ -283,12 +283,9 @@ print_rtx (rtx in_rtx)
 
              case NOTE_INSN_BLOCK_BEG:
              case NOTE_INSN_BLOCK_END:
-               fprintf (outfile, " ");
-               if (flag_dump_unnumbered)
-                 fprintf (outfile, "#");
-               else
-                 fprintf (outfile, "%p",
-                          (char *) NOTE_BLOCK (in_rtx));
+#ifndef GENERATOR_FILE
+               dump_addr (outfile, " ", NOTE_BLOCK (in_rtx));
+#endif
                sawclose = 1;
                break;
 
@@ -539,7 +536,9 @@ print_rtx (rtx in_rtx)
        break;
 
       case 't':
-       fprintf (outfile, " %p", (void *) XTREE (in_rtx, i));
+#ifndef GENERATOR_FILE
+       dump_addr (outfile, " ", XTREE (in_rtx, i));
+#endif
        break;
 
       case '*':
index bfa3ac0..b207fe3 100644 (file)
@@ -57,6 +57,16 @@ debug_tree (tree node)
   putc ('\n', stderr);
 }
 
+/* Print PREFIX and ADDR to FILE.  */
+void
+dump_addr (FILE *file, const char *prefix, void *addr)
+{
+  if (flag_dump_noaddr || flag_dump_unnumbered)
+    fprintf (file, "%s#", prefix);
+  else
+    fprintf (file, "%s%p", prefix, addr);
+}
+
 /* Print a node in brief fashion, with just the code, address and name.  */
 
 void
@@ -73,8 +83,8 @@ print_node_brief (FILE *file, const char *prefix, tree node, int indent)
      name if any.  */
   if (indent > 0)
     fprintf (file, " ");
-  fprintf (file, "%s <%s %p",
-          prefix, tree_code_name[(int) TREE_CODE (node)], (char *) node);
+  fprintf (file, "%s <%s", prefix, tree_code_name[(int) TREE_CODE (node)]);
+  dump_addr (file, " ", node);
 
   if (class == tcc_declaration)
     {
@@ -218,8 +228,8 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
   indent_to (file, indent);
 
   /* Print the slot this node is in, and its code, and address.  */
-  fprintf (file, "%s <%s %p",
-          prefix, tree_code_name[(int) TREE_CODE (node)], (void *) node);
+  fprintf (file, "%s <%s", prefix, tree_code_name[(int) TREE_CODE (node)]);
+  dump_addr (file, " ", node);
 
   /* Print the name, if any.  */
   if (class == tcc_declaration)
@@ -505,8 +515,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
               && DECL_STRUCT_FUNCTION (node) != 0)
        {
          indent_to (file, indent + 4);
-         fprintf (file, "saved-insns %p",
-                  (void *) DECL_STRUCT_FUNCTION (node));
+         dump_addr (file, "saved-insns ", DECL_STRUCT_FUNCTION (node));
        }
 
       if ((TREE_CODE (node) == VAR_DECL || TREE_CODE (node) == PARM_DECL)
@@ -778,15 +787,16 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
          break;
 
        case STATEMENT_LIST:
-         fprintf (file, " head %p tail %p stmts",
-                  (void *) node->stmt_list.head, (void *) node->stmt_list.tail);
+         dump_addr (file, " head ", node->stmt_list.head);
+         dump_addr (file, " tail ", node->stmt_list.tail);
+         fprintf (file, " stmts");
          {
            tree_stmt_iterator i;
            for (i = tsi_start (node); !tsi_end_p (i); tsi_next (&i))
              {
                /* Not printing the addresses of the (not-a-tree)
                   'struct tree_stmt_list_node's.  */
-               fprintf (file, " %p", (void *)tsi_stmt (i));
+               dump_addr (file, " ", tsi_stmt (i));
              }
            fprintf (file, "\n");
            for (i = tsi_start (node); !tsi_end_p (i); tsi_next (&i))
@@ -826,11 +836,9 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
            {
              indent_to (file, indent + 3);
              if (SSA_NAME_PTR_INFO (node))
-               fprintf (file, " ptr-info %p",
-                        (void *) SSA_NAME_PTR_INFO (node));
+               dump_addr (file, " ptr-info ", SSA_NAME_PTR_INFO (node));
              if (SSA_NAME_VALUE (node))
-               fprintf (file, " value %p",
-                        (void *) SSA_NAME_VALUE (node));
+               dump_addr (file, " value ", SSA_NAME_VALUE (node));
            }
          break;
 
index 9b08ae6..9b500c5 100644 (file)
@@ -1,3 +1,9 @@
+2006-07-17  J"orn Rennecke  <joern.rennecke@st.com>
+
+       PR other/28251
+       gcc.c-torture/unsorted/dump-noaddr.c: New test.
+       gcc.c-torture/unsorted/dump-noaddr.x: New driver.
+
 2006-07-17  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/28238
diff --git a/gcc/testsuite/gcc.c-torture/unsorted/dump-noaddr.c b/gcc/testsuite/gcc.c-torture/unsorted/dump-noaddr.c
new file mode 100644 (file)
index 0000000..11dd78b
--- /dev/null
@@ -0,0 +1,48 @@
+#if MASK & 1
+#define t16(x) x x x x x x x x x x x x x x x x
+#define M (sizeof (t16(t16(t16(t16(t16(" ")))))) - 1)
+#endif
+#if MASK & 2
+#define M 1048576
+#endif
+
+typedef struct s {
+  int c;
+  void *vp;
+  struct s *s;
+}s;
+
+typedef int (*fpt) (const char *, void *, int *);
+
+int M_var = M;
+
+extern void exit (int);
+
+int
+f (int start, int end, int *a, int *b, int c, s *sp)
+{
+  int count = 0;
+  int i;
+
+  for (i = start; i <= end; i++)
+    {
+      a[i] = b[i] + c;
+      count ++;
+    }
+  (*(fpt)sp->s->vp) ("Hello World!\n", &exit, &M_var);
+  return count;
+}
+
+int
+g (int i)
+{
+  switch (i)
+    {
+    case 1: return 42;
+    case 2: return 60;
+    case 3: return 7;
+    case 4: return 3;
+    case 5: return M;
+    default: return 0;
+    }
+}
diff --git a/gcc/testsuite/gcc.c-torture/unsorted/dump-noaddr.x b/gcc/testsuite/gcc.c-torture/unsorted/dump-noaddr.x
new file mode 100644 (file)
index 0000000..f0155dd
--- /dev/null
@@ -0,0 +1,49 @@
+# This checks if -fdump-noaddr dumps are done consistently.
+proc dump_compare { src options } {
+    global srcdir subdir
+    global tmpdir
+    
+    exec echo $src
+    
+    global torture_with_loops
+    set option_list $torture_with_loops
+    set dumpbase dump-noaddr
+    # ??? passing -dumpbase to the gcc driver doesn't work, since it will pass
+    # another -dumpbase option to override it.
+    # loop through all the options
+    foreach option $option_list {
+#      c-torture-compile ${dumpbase}_1 "$option $options -DMASK=1 -x c -da -fdump-tree-all"
+#      c-torture-compile ${dumpbase}_2 "$option $options -DMASK=2 -x c -da -fdump-tree-all"
+#      c-torture-compile ${dumpbase}_3 "$option $options -DMASK=3 -x c -da -fdump-tree-all"
+       file delete -force dump1
+       file delete -force dump2
+       file mkdir dump1
+       file mkdir dump2
+       cd dump1
+       c-torture-compile $src "$option $options -DMASK=1 -x c --param ggc-min-heapsize=1 -da -fdump-tree-all -fdump-noaddr"
+       cd ../dump2
+       c-torture-compile $src "$option $options -DMASK=2 -x c -da -fdump-tree-all -fdump-noaddr"
+       cd ..
+       foreach dump1 [lsort [glob -nocomplain dump1/*]] {
+           regsub dump1/ $dump1 dump2/ dump2
+           set dumptail [file tail $dump1]
+           #puts "$option $dump1"
+           set tmp [ diff "$dump1" "$dump2" ]
+           if { $tmp == 0 } {
+               untested "$option $dumptail comparison"
+           } elseif { $tmp == 1 } {
+               pass "$option $dumptail comparison"
+           } else {
+               fail "$option $dumptail comparison"
+           }
+           #exec diff $dump1 $dump2
+       }
+    }
+    file delete -force dump1
+    file delete -force dump2
+}
+
+catch {dump_compare $src $options} result
+puts $result
+verbose result
+return 1
index 49b5be2..12e2f59 100644 (file)
@@ -4340,6 +4340,7 @@ extern void print_rtl (FILE *, rtx);
 /* In print-tree.c */
 extern void debug_tree (tree);
 #ifdef BUFSIZ
+extern void dump_addr (FILE*, const char *, void *);
 extern void print_node (FILE *, const char *, tree, int);
 extern void print_node_brief (FILE *, const char *, tree, int);
 extern void indent_to (FILE *, int);