/* Print RTL for GCC.
Copyright (C) 1987, 1988, 1992, 1997, 1998, 1999, 2000, 2002, 2003,
- 2004, 2005, 2007, 2008, 2009, 2010
+ 2004, 2005, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
This file is part of GCC.
#include "tree-pretty-print.h"
#include "cselib.h"
#include "tree-pass.h"
+#include "dwarf2out.h"
#endif
static FILE *outfile;
the assembly output file. */
const char *print_rtx_head = "";
+#ifdef GENERATOR_FILE
+/* These are defined from the .opt file when not used in generator
+ programs. */
+
/* Nonzero means suppress output of instruction numbers
in debugging dumps.
This must be defined here so that programs like gencodes can be linked. */
and next insns in debugging dumps.
This must be defined here so that programs like gencodes can be linked. */
int flag_dump_unnumbered_links = 0;
+#endif
/* Nonzero means use simplified format without flags, modes, etc. */
int flag_simple = 0;
}
case NOTE_INSN_DELETED_LABEL:
+ case NOTE_INSN_DELETED_DEBUG_LABEL:
{
const char *label = NOTE_DELETED_LABEL_NAME (in_rtx);
if (label)
}
case NOTE_INSN_VAR_LOCATION:
+ case NOTE_INSN_CALL_ARG_LOCATION:
#ifndef GENERATOR_FILE
fputc (' ', outfile);
print_rtx (NOTE_VAR_LOCATION (in_rtx));
#endif
break;
+ case NOTE_INSN_CFI:
+#ifndef GENERATOR_FILE
+ fputc ('\n', outfile);
+ output_cfi_directive (outfile, NOTE_CFI (in_rtx));
+ fputc ('\t', outfile);
+#endif
+ break;
+
default:
break;
}
}
else if (i == 8 && JUMP_P (in_rtx) && JUMP_LABEL (in_rtx) != NULL)
- /* Output the JUMP_LABEL reference. */
- fprintf (outfile, "\n%s%*s -> %d", print_rtx_head, indent * 2, "",
- INSN_UID (JUMP_LABEL (in_rtx)));
+ {
+ /* Output the JUMP_LABEL reference. */
+ fprintf (outfile, "\n%s%*s -> ", print_rtx_head, indent * 2, "");
+ if (GET_CODE (JUMP_LABEL (in_rtx)) == RETURN)
+ fprintf (outfile, "return");
+ else if (GET_CODE (JUMP_LABEL (in_rtx)) == SIMPLE_RETURN)
+ fprintf (outfile, "simple_return");
+ else
+ fprintf (outfile, "%d", INSN_UID (JUMP_LABEL (in_rtx)));
+ }
else if (i == 0 && GET_CODE (in_rtx) == VALUE)
{
#ifndef GENERATOR_FILE
DEBUG_TEMP_UID (DEBUG_EXPR_TREE_DECL (in_rtx)));
#endif
}
+ else if (i == 0 && GET_CODE (in_rtx) == ENTRY_VALUE)
+ {
+ indent += 2;
+ if (!sawclose)
+ fprintf (outfile, " ");
+ print_rtx (ENTRY_VALUE_EXP (in_rtx));
+ indent -= 2;
+ }
break;
case 'e':
do_e:
indent += 2;
+ if (i == 7 && INSN_P (in_rtx))
+ /* Put REG_NOTES on their own line. */
+ fprintf (outfile, "\n%s%*s",
+ print_rtx_head, indent * 2, "");
if (!sawclose)
fprintf (outfile, " ");
print_rtx (XEXP (in_rtx, i));
break;
case 'i':
- if (i == 4 && INSN_P (in_rtx))
+ if (i == 5 && INSN_P (in_rtx))
{
#ifndef GENERATOR_FILE
/* Pretty-print insn locators. Ignore scoping as it is mostly
{
/* This field is only used for NOTE_INSN_DELETED_LABEL, and
other times often contains garbage from INSN->NOTE death. */
- if (NOTE_KIND (in_rtx) == NOTE_INSN_DELETED_LABEL)
+ if (NOTE_KIND (in_rtx) == NOTE_INSN_DELETED_LABEL
+ || NOTE_KIND (in_rtx) == NOTE_INSN_DELETED_DEBUG_LABEL)
fprintf (outfile, " %d", XINT (in_rtx, i));
}
#if !defined(GENERATOR_FILE) && NUM_UNSPECV_VALUES > 0
const char *name;
#ifndef GENERATOR_FILE
- if (REG_P (in_rtx) && value < FIRST_PSEUDO_REGISTER)
- fprintf (outfile, " %d %s", REGNO (in_rtx),
- reg_names[REGNO (in_rtx)]);
+ if (REG_P (in_rtx) && (unsigned) value < FIRST_PSEUDO_REGISTER)
+ fprintf (outfile, " %d %s", value, reg_names[value]);
else if (REG_P (in_rtx)
- && value <= LAST_VIRTUAL_REGISTER)
+ && (unsigned) value <= LAST_VIRTUAL_REGISTER)
{
if (value == VIRTUAL_INCOMING_ARGS_REGNUM)
fprintf (outfile, " %d virtual-incoming-args", value);
fprintf (outfile, " %d virtual-outgoing-args", value);
else if (value == VIRTUAL_CFA_REGNUM)
fprintf (outfile, " %d virtual-cfa", value);
+ else if (value == VIRTUAL_PREFERRED_STACK_BOUNDARY_REGNUM)
+ fprintf (outfile, " %d virtual-preferred-stack-boundary",
+ value);
else
fprintf (outfile, " %d virtual-reg-%d", value,
value-FIRST_VIRTUAL_REGISTER);
case 't':
#ifndef GENERATOR_FILE
- dump_addr (outfile, " ", XTREE (in_rtx, i));
+ if (i == 0 && GET_CODE (in_rtx) == DEBUG_IMPLICIT_PTR)
+ print_mem_expr (outfile, DEBUG_IMPLICIT_PTR_DECL (in_rtx));
+ else if (i == 0 && GET_CODE (in_rtx) == DEBUG_PARAMETER_REF)
+ print_mem_expr (outfile, DEBUG_PARAMETER_REF_DECL (in_rtx));
+ else
+ dump_addr (outfile, " ", XTREE (in_rtx, i));
#endif
break;
if (MEM_EXPR (in_rtx))
print_mem_expr (outfile, MEM_EXPR (in_rtx));
- if (MEM_OFFSET (in_rtx))
- fprintf (outfile, "+" HOST_WIDE_INT_PRINT_DEC,
- INTVAL (MEM_OFFSET (in_rtx)));
+ if (MEM_OFFSET_KNOWN_P (in_rtx))
+ fprintf (outfile, "+" HOST_WIDE_INT_PRINT_DEC, MEM_OFFSET (in_rtx));
- if (MEM_SIZE (in_rtx))
- fprintf (outfile, " S" HOST_WIDE_INT_PRINT_DEC,
- INTVAL (MEM_SIZE (in_rtx)));
+ if (MEM_SIZE_KNOWN_P (in_rtx))
+ fprintf (outfile, " S" HOST_WIDE_INT_PRINT_DEC, MEM_SIZE (in_rtx));
if (MEM_ALIGN (in_rtx) != 1)
fprintf (outfile, " A%u", MEM_ALIGN (in_rtx));