X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree-pretty-print.c;h=d59ec894229753686ec05746a187415c526ad981;hb=c761351cc4891e38cf3ef25fd03b59e6c3901d61;hp=991b1e11654c967532cbbe99e6f5d4163800a162;hpb=8aa4e1429af4414e4b72592465c7c866192af6d5;p=pf3gnuchains%2Fgcc-fork.git
diff --git a/gcc/tree-pretty-print.c b/gcc/tree-pretty-print.c
index 991b1e11654..d59ec894229 100644
--- a/gcc/tree-pretty-print.c
+++ b/gcc/tree-pretty-print.c
@@ -7,7 +7,7 @@ This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
+Software Foundation; either version 3, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
@@ -16,15 +16,15 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
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, 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA. */
+along with GCC; see the file COPYING3. If not see
+. */
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "tm.h"
#include "tree.h"
+#include "output.h"
#include "diagnostic.h"
#include "real.h"
#include "hashtab.h"
@@ -33,19 +33,19 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "tree-iterator.h"
#include "tree-chrec.h"
#include "tree-pass.h"
+#include "fixed-value.h"
#include "value-prof.h"
/* Local functions, macros and variables. */
-static int op_prio (tree);
-static const char *op_symbol_1 (enum tree_code);
-static const char *op_symbol (tree);
+static int op_prio (const_tree);
+static const char *op_symbol (const_tree);
static void pretty_print_string (pretty_printer *, const char*);
-static void print_call_name (pretty_printer *, tree);
+static void print_call_name (pretty_printer *, const_tree);
static void newline_and_indent (pretty_printer *, int);
static void maybe_init_pretty_print (FILE *);
static void print_declaration (pretty_printer *, tree, int, int);
-static void print_struct_decl (pretty_printer *, tree, int, int);
-static void do_niy (pretty_printer *, tree);
+static void print_struct_decl (pretty_printer *, const_tree, int, int);
+static void do_niy (pretty_printer *, const_tree);
static void dump_vops (pretty_printer *, tree, int, int);
static void dump_generic_bb_buff (pretty_printer *, basic_block, int, int);
@@ -65,7 +65,7 @@ static int initialized = 0;
/* Try to print something for an unknown tree code. */
static void
-do_niy (pretty_printer *buffer, tree node)
+do_niy (pretty_printer *buffer, const_tree node)
{
int i, len;
@@ -85,6 +85,8 @@ do_niy (pretty_printer *buffer, tree node)
pp_string (buffer, " >>>\n");
}
+/* Debugging function to print out a generic expression. */
+
void
debug_generic_expr (tree t)
{
@@ -92,6 +94,8 @@ debug_generic_expr (tree t)
fprintf (stderr, "\n");
}
+/* Debugging function to print out a generic statement. */
+
void
debug_generic_stmt (tree t)
{
@@ -99,6 +103,8 @@ debug_generic_stmt (tree t)
fprintf (stderr, "\n");
}
+/* Debugging function to print out a chain of trees . */
+
void
debug_tree_chain (tree t)
{
@@ -173,8 +179,7 @@ dump_decl_name (pretty_printer *buffer, tree node, int flags)
{
if (TREE_CODE (t) == LABEL_DECL
&& LABEL_DECL_UID (t) != -1)
- pp_printf (buffer, "L." HOST_WIDE_INT_PRINT_DEC,
- LABEL_DECL_UID (t));
+ pp_printf (buffer, "L.%d", (int) LABEL_DECL_UID (t));
else
{
char c = TREE_CODE (t) == CONST_DECL ? 'C' : 'D';
@@ -296,7 +301,7 @@ dump_omp_clause (pretty_printer *buffer, tree clause, int spc, int flags)
case OMP_CLAUSE_REDUCTION:
pp_string (buffer, "reduction(");
- pp_string (buffer, op_symbol_1 (OMP_CLAUSE_REDUCTION_CODE (clause)));
+ pp_string (buffer, op_symbol_code (OMP_CLAUSE_REDUCTION_CODE (clause)));
pp_character (buffer, ':');
dump_generic_node (buffer, OMP_CLAUSE_DECL (clause),
spc, flags, false);
@@ -529,6 +534,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
case VOID_TYPE:
case INTEGER_TYPE:
case REAL_TYPE:
+ case FIXED_POINT_TYPE:
case COMPLEX_TYPE:
case VECTOR_TYPE:
case ENUMERAL_TYPE:
@@ -615,9 +621,9 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
if (quals & TYPE_QUAL_CONST)
pp_string (buffer, " const");
- else if (quals & TYPE_QUAL_VOLATILE)
- pp_string (buffer, "volatile");
- else if (quals & TYPE_QUAL_RESTRICT)
+ if (quals & TYPE_QUAL_VOLATILE)
+ pp_string (buffer, " volatile");
+ if (quals & TYPE_QUAL_RESTRICT)
pp_string (buffer, " restrict");
if (TYPE_REF_CAN_ALIAS_ALL (node))
@@ -711,17 +717,26 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
case RECORD_TYPE:
case UNION_TYPE:
case QUAL_UNION_TYPE:
- /* Print the name of the structure. */
- if (TREE_CODE (node) == RECORD_TYPE)
- pp_string (buffer, "struct ");
- else if (TREE_CODE (node) == UNION_TYPE)
- pp_string (buffer, "union ");
+ {
+ unsigned int quals = TYPE_QUALS (node);
- if (TYPE_NAME (node))
- dump_generic_node (buffer, TYPE_NAME (node), spc, flags, false);
- else
- print_struct_decl (buffer, node, spc, flags);
- break;
+ if (quals & TYPE_QUAL_CONST)
+ pp_string (buffer, "const ");
+ if (quals & TYPE_QUAL_VOLATILE)
+ pp_string (buffer, "volatile ");
+
+ /* Print the name of the structure. */
+ if (TREE_CODE (node) == RECORD_TYPE)
+ pp_string (buffer, "struct ");
+ else if (TREE_CODE (node) == UNION_TYPE)
+ pp_string (buffer, "union ");
+
+ if (TYPE_NAME (node))
+ dump_generic_node (buffer, TYPE_NAME (node), spc, flags, false);
+ else
+ print_struct_decl (buffer, node, spc, flags);
+ break;
+ }
case LANG_TYPE:
NIY;
@@ -806,6 +821,14 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
break;
}
+ case FIXED_CST:
+ {
+ char string[100];
+ fixed_to_decimal (string, TREE_FIXED_CST_PTR (node), sizeof (string));
+ pp_string (buffer, string);
+ break;
+ }
+
case COMPLEX_CST:
pp_string (buffer, "__complex__ (");
dump_generic_node (buffer, TREE_REALPART (node), spc, flags, false);
@@ -846,10 +869,9 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
if (DECL_NAME (node))
dump_decl_name (buffer, node, flags);
else if (LABEL_DECL_UID (node) != -1)
- pp_printf (buffer, "",
- LABEL_DECL_UID (node));
+ pp_printf (buffer, "", (int) LABEL_DECL_UID (node));
else
- pp_printf (buffer, "", DECL_UID (node));
+ pp_printf (buffer, "", DECL_UID (node));
break;
case TYPE_DECL:
@@ -1064,6 +1086,16 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
false);
pp_space (buffer);
pp_character (buffer, '=');
+ if (TREE_CODE (node) == GIMPLE_MODIFY_STMT
+ && MOVE_NONTEMPORAL (node))
+ pp_string (buffer, "{nt}");
+ if (TREE_CODE (node) == GIMPLE_MODIFY_STMT)
+ {
+ stmt_ann_t ann;
+ if ((ann = stmt_ann (node))
+ && ann->has_volatile_ops)
+ pp_string (buffer, "{v}");
+ }
pp_space (buffer);
dump_generic_node (buffer, GENERIC_TREE_OPERAND (node, 1), spc, flags,
false);
@@ -1194,6 +1226,15 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
}
}
}
+ if (CALL_EXPR_VA_ARG_PACK (node))
+ {
+ if (call_expr_nargs (node) > 0)
+ {
+ pp_character (buffer, ',');
+ pp_space (buffer);
+ }
+ pp_string (buffer, "__builtin_va_arg_pack ()");
+ }
pp_character (buffer, ')');
op1 = CALL_EXPR_STATIC_CHAIN (node);
@@ -1231,6 +1272,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
case WIDEN_MULT_EXPR:
case MULT_EXPR:
case PLUS_EXPR:
+ case POINTER_PLUS_EXPR:
case MINUS_EXPR:
case TRUNC_DIV_EXPR:
case CEIL_DIV_EXPR:
@@ -1376,6 +1418,7 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
NIY;
break;
+ case FIXED_CONVERT_EXPR:
case FIX_TRUNC_EXPR:
case FLOAT_EXPR:
case CONVERT_EXPR:
@@ -1494,6 +1537,17 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
is_expr = false;
break;
+ case CHANGE_DYNAMIC_TYPE_EXPR:
+ pp_string (buffer, "<<>>");
+ is_expr = false;
+ break;
+
case LABEL_EXPR:
op0 = TREE_OPERAND (node, 0);
/* If this is for break or continue, don't bother printing it. */
@@ -1838,9 +1892,21 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
case OMP_SECTIONS:
pp_string (buffer, "#pragma omp sections");
+ if (OMP_SECTIONS_CONTROL (node))
+ {
+ pp_string (buffer, " <");
+ dump_generic_node (buffer, OMP_SECTIONS_CONTROL (node), spc,
+ flags, false);
+ pp_string (buffer, ">");
+ }
dump_omp_clauses (buffer, OMP_SECTIONS_CLAUSES (node), spc, flags);
goto dump_omp_body;
+ case OMP_SECTIONS_SWITCH:
+ pp_string (buffer, "OMP_SECTIONS_SWITCH");
+ is_expr = false;
+ break;
+
case OMP_SECTION:
pp_string (buffer, "#pragma omp section");
goto dump_omp_body;
@@ -1875,6 +1941,23 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false);
break;
+ case OMP_ATOMIC_LOAD:
+ pp_string (buffer, "#pragma omp atomic_load");
+ newline_and_indent (buffer, spc + 2);
+ dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
+ pp_space (buffer);
+ pp_character (buffer, '=');
+ pp_space (buffer);
+ pp_character (buffer, '*');
+ dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false);
+ break;
+
+ case OMP_ATOMIC_STORE:
+ pp_string (buffer, "#pragma omp atomic_store (");
+ dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
+ pp_character (buffer, ')');
+ break;
+
case OMP_SINGLE:
pp_string (buffer, "#pragma omp single");
dump_omp_clauses (buffer, OMP_SINGLE_CLAUSES (node), spc, flags);
@@ -1888,7 +1971,11 @@ dump_generic_node (pretty_printer *buffer, tree node, int spc, int flags,
break;
case OMP_CONTINUE:
- pp_string (buffer, "OMP_CONTINUE");
+ pp_string (buffer, "OMP_CONTINUE <");
+ dump_generic_node (buffer, TREE_OPERAND (node, 0), spc, flags, false);
+ pp_string (buffer, " <- ");
+ dump_generic_node (buffer, TREE_OPERAND (node, 1), spc, flags, false);
+ pp_string (buffer, ">");
is_expr = false;
break;
@@ -2180,7 +2267,7 @@ print_declaration (pretty_printer *buffer, tree t, int spc, int flags)
FIXME: Still incomplete. */
static void
-print_struct_decl (pretty_printer *buffer, tree node, int spc, int flags)
+print_struct_decl (pretty_printer *buffer, const_tree node, int spc, int flags)
{
/* Print the name of the structure. */
if (TYPE_NAME (node))
@@ -2251,7 +2338,7 @@ print_struct_decl (pretty_printer *buffer, tree node, int spc, int flags)
operators. */
static int
-op_prio (tree op)
+op_prio (const_tree op)
{
if (op == NULL)
return 9999;
@@ -2315,6 +2402,7 @@ op_prio (tree op)
case WIDEN_SUM_EXPR:
case PLUS_EXPR:
+ case POINTER_PLUS_EXPR:
case MINUS_EXPR:
return 12;
@@ -2390,10 +2478,10 @@ op_prio (tree op)
}
-/* Return the symbol associated with operator OP. */
+/* Return the symbol associated with operator CODE. */
-static const char *
-op_symbol_1 (enum tree_code code)
+const char *
+op_symbol_code (enum tree_code code)
{
switch (code)
{
@@ -2473,6 +2561,9 @@ op_symbol_1 (enum tree_code code)
case VEC_RSHIFT_EXPR:
return "v>>";
+
+ case POINTER_PLUS_EXPR:
+ return "+";
case PLUS_EXPR:
return "+";
@@ -2557,16 +2648,18 @@ op_symbol_1 (enum tree_code code)
}
}
+/* Return the symbol associated with operator OP. */
+
static const char *
-op_symbol (tree op)
+op_symbol (const_tree op)
{
- return op_symbol_1 (TREE_CODE (op));
+ return op_symbol_code (TREE_CODE (op));
}
/* Prints the name of a CALL_EXPR. */
static void
-print_call_name (pretty_printer *buffer, tree node)
+print_call_name (pretty_printer *buffer, const_tree node)
{
tree op0;