X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Ftree-dump.c;h=3e89cdf11f363397e61e7457bd69d9b027723836;hb=4be60539825c7a422e1351a8129df0453a4771f6;hp=b7363c377c00e05e47e2d5abc9982a680b464de1;hpb=45ba15034406e35c256ecb230d03603289eef617;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree-dump.c b/gcc/tree-dump.c index b7363c377c0..3e89cdf11f3 100644 --- a/gcc/tree-dump.c +++ b/gcc/tree-dump.c @@ -1,6 +1,6 @@ /* Tree-dumping functionality for intermediate representation. - Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008 - Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, + 2010, 2011 Free Software Foundation, Inc. Written by Mark Mitchell This file is part of GCC. @@ -25,14 +25,18 @@ along with GCC; see the file COPYING3. If not see #include "tm.h" #include "tree.h" #include "splay-tree.h" -#include "diagnostic.h" +#include "filenames.h" +#include "diagnostic-core.h" #include "toplev.h" #include "tree-dump.h" #include "tree-pass.h" #include "langhooks.h" #include "tree-iterator.h" -#include "real.h" -#include "fixed-value.h" + +/* If non-NULL, return one past-the-end of the matching SUBPART of + the WHOLE string. */ +#define skip_leading_substring(whole, part) \ + (strncmp (whole, part, strlen (part)) ? NULL : whole + strlen (part)) static unsigned int queue (dump_info_p, const_tree, int); static void dump_index (dump_info_p, unsigned int); @@ -356,12 +360,7 @@ dequeue_and_dump (dump_info_p di) xloc = expand_location (DECL_SOURCE_LOCATION (t)); if (xloc.file) { - const char *filename = strrchr (xloc.file, '/'); - if (!filename) - filename = xloc.file; - else - /* Skip the slash. */ - ++filename; + const char *filename = lbasename (xloc.file); dump_maybe_newline (di); fprintf (di->stream, "srcp: %s:%-6d ", filename, @@ -372,8 +371,8 @@ dequeue_and_dump (dump_info_p di) if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_DECL_COMMON) && DECL_ARTIFICIAL (t)) dump_string_field (di, "note", "artificial"); - if (TREE_CHAIN (t) && !dump_flag (di, TDF_SLIM, NULL)) - dump_child ("chan", TREE_CHAIN (t)); + if (DECL_CHAIN (t) && !dump_flag (di, TDF_SLIM, NULL)) + dump_child ("chain", DECL_CHAIN (t)); } else if (code_class == tcc_type) { @@ -510,10 +509,10 @@ dequeue_and_dump (dump_info_p di) case CONST_DECL: dump_child ("cnst", DECL_INITIAL (t)); break; - - case SYMBOL_MEMORY_TAG: - case NAME_MEMORY_TAG: - break; + + case DEBUG_EXPR_DECL: + dump_int (di, "-uid", DEBUG_TEMP_UID (t)); + /* Fall through. */ case VAR_DECL: case PARM_DECL: @@ -574,8 +573,6 @@ dequeue_and_dump (dump_info_p di) case TRUTH_NOT_EXPR: case ADDR_EXPR: case INDIRECT_REF: - case ALIGN_INDIRECT_REF: - case MISALIGNED_INDIRECT_REF: case CLEANUP_POINT_EXPR: case SAVE_EXPR: case REALPART_EXPR: @@ -598,11 +595,6 @@ dequeue_and_dump (dump_info_p di) dump_child ("op 1", TREE_OPERAND (t, 1)); break; - case GIMPLE_MODIFY_STMT: - dump_child ("op 0", GIMPLE_STMT_OPERAND (t, 0)); - dump_child ("op 1", GIMPLE_STMT_OPERAND (t, 1)); - break; - case COMPONENT_REF: dump_child ("op 0", TREE_OPERAND (t, 0)); dump_child ("op 1", TREE_OPERAND (t, 1)); @@ -788,7 +780,8 @@ static struct dump_file_info dump_files[TDI_end] = {".gimple", "tree-gimple", NULL, TDF_TREE, 0, 4}, {".nested", "tree-nested", NULL, TDF_TREE, 0, 5}, {".vcg", "tree-vcg", NULL, TDF_TREE, 0, 6}, -#define FIRST_AUTO_NUMBERED_DUMP 7 + {".ads", "ada-spec", NULL, 0, 0, 7}, +#define FIRST_AUTO_NUMBERED_DUMP 8 {NULL, "tree-all", NULL, TDF_TREE, 0, 0}, {NULL, "rtl-all", NULL, TDF_RTL, 0, 0}, @@ -812,9 +805,12 @@ struct dump_option_value_info static const struct dump_option_value_info dump_options[] = { {"address", TDF_ADDRESS}, + {"asmname", TDF_ASMNAME}, {"slim", TDF_SLIM}, {"raw", TDF_RAW}, + {"graph", TDF_GRAPH}, {"details", TDF_DETAILS}, + {"cselib", TDF_CSELIB}, {"stats", TDF_STATS}, {"blocks", TDF_BLOCKS}, {"vops", TDF_VOPS}, @@ -823,8 +819,14 @@ static const struct dump_option_value_info dump_options[] = {"stmtaddr", TDF_STMTADDR}, {"memsyms", TDF_MEMSYMS}, {"verbose", TDF_VERBOSE}, - {"all", ~(TDF_RAW | TDF_SLIM | TDF_LINENO | TDF_TREE | TDF_RTL | TDF_IPA - | TDF_STMTADDR | TDF_GRAPH | TDF_DIAGNOSTIC | TDF_VERBOSE)}, + {"eh", TDF_EH}, + {"alias", TDF_ALIAS}, + {"nouid", TDF_NOUID}, + {"enumerate_locals", TDF_ENUMERATE_LOCALS}, + {"scev", TDF_SCEV}, + {"all", ~(TDF_RAW | TDF_SLIM | TDF_LINENO | TDF_TREE | TDF_RTL | TDF_IPA + | TDF_STMTADDR | TDF_GRAPH | TDF_DIAGNOSTIC | TDF_VERBOSE + | TDF_RHS_ONLY | TDF_NOUID | TDF_ENUMERATE_LOCALS | TDF_SCEV)}, {NULL, 0} }; @@ -835,9 +837,9 @@ dump_register (const char *suffix, const char *swtch, const char *glob, static int next_dump = FIRST_AUTO_NUMBERED_DUMP; int num = next_dump++; - size_t this = extra_dump_files_in_use++; + size_t count = extra_dump_files_in_use++; - if (this >= extra_dump_files_alloced) + if (count >= extra_dump_files_alloced) { if (extra_dump_files_alloced == 0) extra_dump_files_alloced = 32; @@ -848,25 +850,25 @@ dump_register (const char *suffix, const char *swtch, const char *glob, extra_dump_files_alloced); } - memset (&extra_dump_files[this], 0, sizeof (struct dump_file_info)); - extra_dump_files[this].suffix = suffix; - extra_dump_files[this].swtch = swtch; - extra_dump_files[this].glob = glob; - extra_dump_files[this].flags = flags; - extra_dump_files[this].num = num; + memset (&extra_dump_files[count], 0, sizeof (struct dump_file_info)); + extra_dump_files[count].suffix = suffix; + extra_dump_files[count].swtch = swtch; + extra_dump_files[count].glob = glob; + extra_dump_files[count].flags = flags; + extra_dump_files[count].num = num; - return this + TDI_end; + return count + TDI_end; } /* Return the dump_file_info for the given phase. */ struct dump_file_info * -get_dump_file_info (enum tree_dump_index phase) +get_dump_file_info (int phase) { if (phase < TDI_end) return &dump_files[phase]; - else if (phase - TDI_end >= extra_dump_files_in_use) + else if ((size_t) (phase - TDI_end) >= extra_dump_files_in_use) return NULL; else return extra_dump_files + (phase - TDI_end); @@ -877,7 +879,7 @@ get_dump_file_info (enum tree_dump_index phase) If the dump is not enabled, returns NULL. */ char * -get_dump_file_name (enum tree_dump_index phase) +get_dump_file_name (int phase) { char dump_id[10]; struct dump_file_info *dfi; @@ -914,7 +916,7 @@ get_dump_file_name (enum tree_dump_index phase) Multiple calls will reopen and append to the dump file. */ FILE * -dump_begin (enum tree_dump_index phase, int *flag_ptr) +dump_begin (int phase, int *flag_ptr) { char *name; struct dump_file_info *dfi; @@ -927,7 +929,7 @@ dump_begin (enum tree_dump_index phase, int *flag_ptr) dfi = get_dump_file_info (phase); stream = fopen (name, dfi->state < 0 ? "w" : "a"); if (!stream) - error ("could not open dump file %qs: %s", name, strerror (errno)); + error ("could not open dump file %qs: %m", name); else dfi->state = 1; free (name); @@ -942,7 +944,7 @@ dump_begin (enum tree_dump_index phase, int *flag_ptr) TDI_tree_all, return nonzero if any dump is enabled. */ int -dump_enabled_p (enum tree_dump_index phase) +dump_enabled_p (int phase) { if (phase == TDI_tree_all) { @@ -965,7 +967,7 @@ dump_enabled_p (enum tree_dump_index phase) /* Returns nonzero if tree dump PHASE has been initialized. */ int -dump_initialized_p (enum tree_dump_index phase) +dump_initialized_p (int phase) { struct dump_file_info *dfi = get_dump_file_info (phase); return dfi->state > 0; @@ -974,7 +976,7 @@ dump_initialized_p (enum tree_dump_index phase) /* Returns the switch name of PHASE. */ const char * -dump_flag_name (enum tree_dump_index phase) +dump_flag_name (int phase) { struct dump_file_info *dfi = get_dump_file_info (phase); return dfi->swtch; @@ -984,7 +986,7 @@ dump_flag_name (enum tree_dump_index phase) dump_begin. */ void -dump_end (enum tree_dump_index phase ATTRIBUTE_UNUSED, FILE *stream) +dump_end (int phase ATTRIBUTE_UNUSED, FILE *stream) { fclose (stream); } @@ -1026,7 +1028,7 @@ dump_switch_p_1 (const char *arg, struct dump_file_info *dfi, bool doglob) const char *option_value; const char *ptr; int flags; - + if (doglob && !dfi->glob) return 0; @@ -1093,7 +1095,7 @@ dump_switch_p (const char *arg) for (i = 0; i < extra_dump_files_in_use; i++) any |= dump_switch_p_1 (arg, &extra_dump_files[i], false); - + if (!any) for (i = 0; i < extra_dump_files_in_use; i++) any |= dump_switch_p_1 (arg, &extra_dump_files[i], true); @@ -1105,7 +1107,7 @@ dump_switch_p (const char *arg) /* Dump FUNCTION_DECL FN as tree dump PHASE. */ void -dump_function (enum tree_dump_index phase, tree fn) +dump_function (int phase, tree fn) { FILE *stream; int flags; @@ -1123,5 +1125,3 @@ enable_rtl_dump_file (void) { return dump_enable_all (TDF_RTL | TDF_DETAILS | TDF_BLOCKS) > 0; } - -