diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5b4258a9894..88096ccf226 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2007-05-24 Jan Hubicka + + * doc/invoke.texi (-fdump-unnumbered): Update docs when line number + notes are gone. + * print-rtl.c (flag_dump_unnumbered): Update comments. + (print_rtl): Fix my previous change. + * emit-rtl.c (emit_note_before, emit_note_after): Clear out note + specific data. + 2007-05-24 Zdenek Dvorak PR middle-end/32018 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index a057a0cbc7f..47b68d73a75 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -4495,7 +4495,7 @@ 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, line number note and address output. This makes it more feasible to +numbers 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}. diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index afd3a401a25..17f8c2d8446 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -3881,6 +3881,7 @@ emit_note_before (enum insn_note subtype, rtx before) INSN_UID (note) = cur_insn_uid++; NOTE_KIND (note) = subtype; BLOCK_FOR_INSN (note) = NULL; + memset (&NOTE_DATA (note), 0, sizeof (NOTE_DATA (note))); add_insn_before (note, before); return note; @@ -4078,6 +4079,7 @@ emit_note_after (enum insn_note subtype, rtx after) INSN_UID (note) = cur_insn_uid++; NOTE_KIND (note) = subtype; BLOCK_FOR_INSN (note) = NULL; + memset (&NOTE_DATA (note), 0, sizeof (NOTE_DATA (note))); add_insn_after (note, after); return note; } diff --git a/gcc/gengenrtl.c b/gcc/gengenrtl.c index fd4a0218eb2..5088df5cab6 100644 --- a/gcc/gengenrtl.c +++ b/gcc/gengenrtl.c @@ -191,7 +191,7 @@ gendecl (const char *format) const char *p; int i, pos; - printf ("extern rtx gen_rtx_fmt_%s\t (RTX_CODE, ", format); + printf ("extern rtx gen_rtx_fmt_%s_stat\t (RTX_CODE, ", format); printf ("enum machine_mode mode"); /* Write each parameter that is needed and start a new line when the line @@ -208,8 +208,18 @@ gendecl (const char *format) printf (" %sarg%d", type_from_format (*p), i++); pos += ourlen; } + printf (" MEM_STAT_DECL"); printf (");\n"); + printf ("#define gen_rtx_fmt_%s(c, m", format); + for (p = format, i = 0; *p != 0; p++) + if (*p != '0') + printf (", p%i",i++); + printf (")\\\n gen_rtx_fmt_%s_stat (c, m", format); + for (p = format, i = 0; *p != 0; p++) + if (*p != '0') + printf (", p%i",i++); + printf (" MEM_STAT_INFO)\n\n"); } /* Generate macros to generate RTL of code IDX using the functions we @@ -257,18 +267,18 @@ gendef (const char *format) /* Start by writing the definition of the function name and the types of the arguments. */ - printf ("rtx\ngen_rtx_fmt_%s (RTX_CODE code, enum machine_mode mode", format); + printf ("rtx\ngen_rtx_fmt_%s_stat (RTX_CODE code, enum machine_mode mode", format); for (p = format, i = 0; *p != 0; p++) if (*p != '0') printf (",\n\t%sarg%d", type_from_format (*p), i++); - puts (")"); + puts (" MEM_STAT_DECL)"); /* Now write out the body of the function itself, which allocates the memory and initializes it. */ puts ("{"); puts (" rtx rt;"); - puts (" rt = rtx_alloc (code);\n"); + puts (" rt = rtx_alloc_stat (code PASS_MEM_STAT);\n"); puts (" PUT_MODE (rt, mode);"); @@ -299,6 +309,7 @@ genheader (void) puts ("#ifndef GCC_GENRTL_H"); puts ("#define GCC_GENRTL_H\n"); + puts ("#include \"statistics.h\"\n"); for (fmt = formats; *fmt; ++fmt) gendecl (*fmt); diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c index 7301b08d03e..a47a02b87fe 100644 --- a/gcc/print-rtl.c +++ b/gcc/print-rtl.c @@ -56,8 +56,8 @@ static void print_rtx (rtx); the assembly output file. */ const char *print_rtx_head = ""; -/* Nonzero means suppress output of instruction numbers and line number - notes in debugging dumps. +/* Nonzero means suppress output of instruction numbers + in debugging dumps. This must be defined here so that programs like gencodes can be linked. */ int flag_dump_unnumbered = 0; @@ -705,6 +705,8 @@ debug_rtx_find (rtx x, int uid) void print_rtl (FILE *outf, rtx rtx_first) { + rtx tmp_rtx; + outfile = outf; sawclose = 0; @@ -722,6 +724,12 @@ print_rtl (FILE *outf, rtx rtx_first) case NOTE: case CODE_LABEL: case BARRIER: + for (tmp_rtx = rtx_first; tmp_rtx != 0; tmp_rtx = NEXT_INSN (tmp_rtx)) + { + fputs (print_rtx_head, outfile); + print_rtx (tmp_rtx); + fprintf (outfile, "\n"); + } break; default: