/* Print RTL for GCC.
- Copyright (C) 1987, 1988, 1992, 1997, 1998, 1999, 2000, 2002, 2003, 2004
+ Copyright (C) 1987, 1988, 1992, 1997, 1998, 1999, 2000, 2002, 2003,
+ 2004, 2005
Free Software Foundation, Inc.
This file is part of GCC.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA. */
+Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA. */
/* This file is compiled twice: once for the generator programs,
once for the compiler. */
int dump_for_graph;
#ifndef GENERATOR_FILE
+static void
+print_decl_name (FILE *outfile, tree node)
+{
+ if (DECL_NAME (node))
+ fputs (IDENTIFIER_POINTER (DECL_NAME (node)), outfile);
+ else
+ {
+ if (TREE_CODE (node) == LABEL_DECL && LABEL_DECL_UID (node) != -1)
+ fprintf (outfile, "L." HOST_WIDE_INT_PRINT_DEC, LABEL_DECL_UID (node));
+ else
+ {
+ char c = TREE_CODE (node) == CONST_DECL ? 'C' : 'D';
+ fprintf (outfile, "%c.%u", c, DECL_UID (node));
+ }
+ }
+}
+
void
print_mem_expr (FILE *outfile, tree expr)
{
print_mem_expr (outfile, TREE_OPERAND (expr, 0));
else
fputs (" <variable>", outfile);
- if (DECL_NAME (TREE_OPERAND (expr, 1)))
- fprintf (outfile, ".%s",
- IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (expr, 1))));
+ fputc ('.', outfile);
+ print_decl_name (outfile, TREE_OPERAND (expr, 1));
}
else if (TREE_CODE (expr) == INDIRECT_REF)
{
print_mem_expr (outfile, TREE_OPERAND (expr, 0));
fputs (")", outfile);
}
- else if (DECL_NAME (expr))
- fprintf (outfile, " %s", IDENTIFIER_POINTER (DECL_NAME (expr)));
+ else if (TREE_CODE (expr) == ALIGN_INDIRECT_REF)
+ {
+ fputs (" (A*", outfile);
+ print_mem_expr (outfile, TREE_OPERAND (expr, 0));
+ fputs (")", outfile);
+ }
+ else if (TREE_CODE (expr) == MISALIGNED_INDIRECT_REF)
+ {
+ fputs (" (M*", outfile);
+ print_mem_expr (outfile, TREE_OPERAND (expr, 0));
+ fputs (")", outfile);
+ }
else if (TREE_CODE (expr) == RESULT_DECL)
fputs (" <result>", outfile);
else
- fputs (" <anonymous>", outfile);
+ {
+ fputc (' ', outfile);
+ print_decl_name (outfile, expr);
+ }
}
#endif
if (RTX_FLAG (in_rtx, return_val))
fputs ("/i", outfile);
- if (GET_MODE (in_rtx) != VOIDmode)
- {
- /* Print REG_NOTE names for EXPR_LIST and INSN_LIST. */
- if (GET_CODE (in_rtx) == EXPR_LIST
- || GET_CODE (in_rtx) == INSN_LIST)
- fprintf (outfile, ":%s",
- GET_REG_NOTE_NAME (GET_MODE (in_rtx)));
- else
- fprintf (outfile, ":%s", GET_MODE_NAME (GET_MODE (in_rtx)));
- }
+ /* Print REG_NOTE names for EXPR_LIST and INSN_LIST. */
+ if (GET_CODE (in_rtx) == EXPR_LIST
+ || GET_CODE (in_rtx) == INSN_LIST)
+ fprintf (outfile, ":%s",
+ GET_REG_NOTE_NAME (GET_MODE (in_rtx)));
+
+ /* For other rtl, print the mode if it's not VOID. */
+ else if (GET_MODE (in_rtx) != VOIDmode)
+ fprintf (outfile, ":%s", GET_MODE_NAME (GET_MODE (in_rtx)));
}
}
if (flag_dump_unnumbered)
fprintf (outfile, "#");
else
- fprintf (outfile, HOST_PTR_PRINTF,
+ fprintf (outfile, "%p",
(char *) NOTE_BLOCK (in_rtx));
sawclose = 1;
break;
}
break;
- case NOTE_INSN_UNLIKELY_EXECUTED_CODE:
+ case NOTE_INSN_SWITCH_TEXT_SECTIONS:
{
#ifndef GENERATOR_FILE
basic_block bb = NOTE_BASIC_BLOCK (in_rtx);
break;
case 't':
- fprintf (outfile, " " HOST_PTR_PRINTF, (void *) XTREE (in_rtx, i));
+ fprintf (outfile, " %p", (void *) XTREE (in_rtx, i));
break;
case '*':
break;
default:
- fprintf (stderr,
- "switch format wrong in rtl.print_rtx(). format was: %c.\n",
- format_ptr[-1]);
- abort ();
+ gcc_unreachable ();
}
switch (GET_CODE (in_rtx))
case LABEL_STATIC_ENTRY: fputs (" [entry]", outfile); break;
case LABEL_GLOBAL_ENTRY: fputs (" [global entry]", outfile); break;
case LABEL_WEAK_ENTRY: fputs (" [weak entry]", outfile); break;
- default: abort();
+ default: gcc_unreachable ();
}
break;