summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/print-rtl.c
diff options
context:
space:
mode:
authorkan <kan@FreeBSD.org>2004-07-28 03:11:36 +0000
committerkan <kan@FreeBSD.org>2004-07-28 03:11:36 +0000
commit5e00ec74d8ce58f99801200d4d3d0412c7cc1b28 (patch)
tree052f4bb635f2bea2c5e350bd60c902be100a0d1e /contrib/gcc/print-rtl.c
parent87b8398a7d9f9bf0e28bbcd54a4fc27db2125f38 (diff)
downloadFreeBSD-src-5e00ec74d8ce58f99801200d4d3d0412c7cc1b28.zip
FreeBSD-src-5e00ec74d8ce58f99801200d4d3d0412c7cc1b28.tar.gz
Gcc 3.4.2 20040728.
Diffstat (limited to 'contrib/gcc/print-rtl.c')
-rw-r--r--contrib/gcc/print-rtl.c143
1 files changed, 69 insertions, 74 deletions
diff --git a/contrib/gcc/print-rtl.c b/contrib/gcc/print-rtl.c
index 0a0ac9e..f5e30fe 100644
--- a/contrib/gcc/print-rtl.c
+++ b/contrib/gcc/print-rtl.c
@@ -1,4 +1,4 @@
-/* Print RTL for GNU C Compiler.
+/* Print RTL for GCC.
Copyright (C) 1987, 1988, 1992, 1997, 1998, 1999, 2000, 2002, 2003
Free Software Foundation, Inc.
@@ -22,6 +22,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "config.h"
#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
#include "rtl.h"
/* We don't want the tree code checking code for the access to the
@@ -32,23 +34,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "flags.h"
#include "hard-reg-set.h"
#include "basic-block.h"
-
-/* How to print out a register name.
- We don't use PRINT_REG because some definitions of PRINT_REG
- don't work here. */
-#ifndef DEBUG_PRINT_REG
-#define DEBUG_PRINT_REG(RTX, CODE, FILE) \
- fprintf ((FILE), "%d %s", REGNO (RTX), reg_names[REGNO (RTX)])
-#endif
-
-/* Array containing all of the register names */
-
-#ifdef DEBUG_REGISTER_NAMES
-static const char * const debug_reg_names[] = DEBUG_REGISTER_NAMES;
-#define reg_names debug_reg_names
-#else
-const char * reg_names[] = REGISTER_NAMES;
-#endif
+#include "tm_p.h"
static FILE *outfile;
@@ -56,7 +42,7 @@ static int sawclose = 0;
static int indent;
-static void print_rtx PARAMS ((rtx));
+static void print_rtx (rtx);
/* String printed at beginning of each RTL when it is dumped.
This string is set to ASM_COMMENT_START when the RTL is dumped in
@@ -78,9 +64,7 @@ int dump_for_graph;
static int debug_call_placeholder_verbose;
void
-print_mem_expr (outfile, expr)
- FILE *outfile;
- tree expr;
+print_mem_expr (FILE *outfile, tree expr)
{
if (TREE_CODE (expr) == COMPONENT_REF)
{
@@ -109,8 +93,7 @@ print_mem_expr (outfile, expr)
/* Print IN_RTX onto OUTFILE. This is the recursive part of printing. */
static void
-print_rtx (in_rtx)
- rtx in_rtx;
+print_rtx (rtx in_rtx)
{
int i = 0;
int j;
@@ -237,9 +220,22 @@ print_rtx (in_rtx)
{
if (REGNO (in_rtx) != ORIGINAL_REGNO (in_rtx))
fprintf (outfile, " [%d]", ORIGINAL_REGNO (in_rtx));
- break;
}
- if (i == 4 && GET_CODE (in_rtx) == NOTE)
+#ifndef GENERATOR_FILE
+ else if (i == 1 && GET_CODE (in_rtx) == SYMBOL_REF)
+ {
+ int flags = SYMBOL_REF_FLAGS (in_rtx);
+ if (flags)
+ fprintf (outfile, " [flags 0x%x]", flags);
+ }
+ else if (i == 2 && GET_CODE (in_rtx) == SYMBOL_REF)
+ {
+ tree decl = SYMBOL_REF_DECL (in_rtx);
+ if (decl)
+ print_node_brief (outfile, "", decl, 0);
+ }
+#endif
+ else if (i == 4 && GET_CODE (in_rtx) == NOTE)
{
switch (NOTE_LINE_NUMBER (in_rtx))
{
@@ -359,15 +355,22 @@ print_rtx (in_rtx)
fprintf (outfile, " ");
fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, XWINT (in_rtx, i));
if (! flag_simple)
- {
- fprintf (outfile, " [");
- fprintf (outfile, HOST_WIDE_INT_PRINT_HEX, XWINT (in_rtx, i));
- fprintf (outfile, "]");
- }
+ fprintf (outfile, " [" HOST_WIDE_INT_PRINT_HEX "]",
+ XWINT (in_rtx, i));
break;
case 'i':
- if (i == 6 && GET_CODE (in_rtx) == NOTE)
+ if (i == 4 && INSN_P (in_rtx))
+ {
+#ifndef GENERATOR_FILE
+ /* Pretty-print insn locators. Ignore scoping as it is mostly
+ redundant with line number information and do not print anything
+ when there is no location information available. */
+ if (INSN_LOCATOR (in_rtx) && insn_file (in_rtx))
+ fprintf(outfile, " %s:%i", insn_file (in_rtx), insn_line (in_rtx));
+#endif
+ }
+ else if (i == 6 && GET_CODE (in_rtx) == NOTE)
{
/* This field is only used for NOTE_INSN_DELETED_LABEL, and
other times often contains garbage from INSN->NOTE death. */
@@ -379,11 +382,10 @@ print_rtx (in_rtx)
int value = XINT (in_rtx, i);
const char *name;
+#ifndef GENERATOR_FILE
if (GET_CODE (in_rtx) == REG && value < FIRST_PSEUDO_REGISTER)
- {
- fputc (' ', outfile);
- DEBUG_PRINT_REG (in_rtx, 0, outfile);
- }
+ fprintf (outfile, " %d %s", REGNO (in_rtx),
+ reg_names[REGNO (in_rtx)]);
else if (GET_CODE (in_rtx) == REG
&& value <= LAST_VIRTUAL_REGISTER)
{
@@ -401,12 +403,28 @@ print_rtx (in_rtx)
fprintf (outfile, " %d virtual-reg-%d", value,
value-FIRST_VIRTUAL_REGISTER);
}
- else if (flag_dump_unnumbered
+ else
+#endif
+ if (flag_dump_unnumbered
&& (is_insn || GET_CODE (in_rtx) == NOTE))
fputc ('#', outfile);
else
fprintf (outfile, " %d", value);
+ if (GET_CODE (in_rtx) == REG && REG_ATTRS (in_rtx))
+ {
+ fputs (" [", outfile);
+ if (ORIGINAL_REGNO (in_rtx) != REGNO (in_rtx))
+ fprintf (outfile, "orig:%i", ORIGINAL_REGNO (in_rtx));
+ if (REG_EXPR (in_rtx))
+ print_mem_expr (outfile, REG_EXPR (in_rtx));
+
+ if (REG_OFFSET (in_rtx))
+ fprintf (outfile, "+" HOST_WIDE_INT_PRINT_DEC,
+ REG_OFFSET (in_rtx));
+ fputs (" ]", outfile);
+ }
+
if (is_insn && &INSN_CODE (in_rtx) == &XINT (in_rtx, i)
&& XINT (in_rtx, i) >= 0
&& (name = get_insn_name (XINT (in_rtx, i))) != NULL)
@@ -468,8 +486,7 @@ print_rtx (in_rtx)
break;
case 't':
- putc (' ', outfile);
- fprintf (outfile, HOST_PTR_PRINTF, (char *) XTREE (in_rtx, i));
+ fprintf (outfile, " " HOST_PTR_PRINTF, (void *) XTREE (in_rtx, i));
break;
case '*':
@@ -493,25 +510,18 @@ print_rtx (in_rtx)
{
#ifndef GENERATOR_FILE
case MEM:
- fputs (" [", outfile);
- fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, MEM_ALIAS_SET (in_rtx));
+ fprintf (outfile, " [" HOST_WIDE_INT_PRINT_DEC, MEM_ALIAS_SET (in_rtx));
if (MEM_EXPR (in_rtx))
print_mem_expr (outfile, MEM_EXPR (in_rtx));
if (MEM_OFFSET (in_rtx))
- {
- fputc ('+', outfile);
- fprintf (outfile, HOST_WIDE_INT_PRINT_DEC,
- INTVAL (MEM_OFFSET (in_rtx)));
- }
+ fprintf (outfile, "+" HOST_WIDE_INT_PRINT_DEC,
+ INTVAL (MEM_OFFSET (in_rtx)));
if (MEM_SIZE (in_rtx))
- {
- fputs (" S", outfile);
- fprintf (outfile, HOST_WIDE_INT_PRINT_DEC,
- INTVAL (MEM_SIZE (in_rtx)));
- }
+ fprintf (outfile, " S" HOST_WIDE_INT_PRINT_DEC,
+ INTVAL (MEM_SIZE (in_rtx)));
if (MEM_ALIGN (in_rtx) != 1)
fprintf (outfile, " A%u", MEM_ALIGN (in_rtx));
@@ -609,10 +619,7 @@ print_rtx (in_rtx)
characters. */
void
-print_inline_rtx (outf, x, ind)
- FILE *outf;
- rtx x;
- int ind;
+print_inline_rtx (FILE *outf, rtx x, int ind)
{
int oldsaw = sawclose;
int oldindent = indent;
@@ -628,8 +635,7 @@ print_inline_rtx (outf, x, ind)
/* Call this function from the debugger to see what X looks like. */
void
-debug_rtx (x)
- rtx x;
+debug_rtx (rtx x)
{
outfile = stderr;
sawclose = 0;
@@ -649,9 +655,7 @@ int debug_rtx_count = 0; /* 0 is treated as equivalent to 1 */
EG: -5 prints 2 rtx's on either side (in addition to the specified rtx). */
void
-debug_rtx_list (x, n)
- rtx x;
- int n;
+debug_rtx_list (rtx x, int n)
{
int i,count;
rtx insn;
@@ -678,8 +682,7 @@ debug_rtx_list (x, n)
/* Call this function to print an rtx list from START to END inclusive. */
void
-debug_rtx_range (start, end)
- rtx start, end;
+debug_rtx_range (rtx start, rtx end)
{
while (1)
{
@@ -696,9 +699,7 @@ debug_rtx_range (start, end)
The found insn is returned to enable further debugging analysis. */
rtx
-debug_rtx_find (x, uid)
- rtx x;
- int uid;
+debug_rtx_find (rtx x, int uid)
{
while (x != 0 && INSN_UID (x) != uid)
x = NEXT_INSN (x);
@@ -721,9 +722,7 @@ debug_rtx_find (x, uid)
If RTX_FIRST is not an insn, then it alone is printed, with no newline. */
void
-print_rtl (outf, rtx_first)
- FILE *outf;
- rtx rtx_first;
+print_rtl (FILE *outf, rtx rtx_first)
{
rtx tmp_rtx;
@@ -764,9 +763,7 @@ print_rtl (outf, rtx_first)
/* Return nonzero if we actually printed anything. */
int
-print_rtl_single (outf, x)
- FILE *outf;
- rtx x;
+print_rtl_single (FILE *outf, rtx x)
{
outfile = outf;
sawclose = 0;
@@ -786,9 +783,7 @@ print_rtl_single (outf, x)
if RTX is a CONST_INT then print in decimal format. */
void
-print_simple_rtl (outf, x)
- FILE *outf;
- rtx x;
+print_simple_rtl (FILE *outf, rtx x)
{
flag_simple = 1;
print_rtl (outf, x);
OpenPOWER on IntegriCloud