X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fsched-vis.c;h=5b6ea9ed88a317c22aadfcca3015b6ffefa8e7e5;hb=ce7f50299282f2c127b076c182b5db89acd9542d;hp=2544338d646b1566285601f1cf0ef0ff2e848297;hpb=e1ab78748da58d43da7f08cc64b9de80577f470e;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/sched-vis.c b/gcc/sched-vis.c index 2544338d646..5b6ea9ed88a 100644 --- a/gcc/sched-vis.c +++ b/gcc/sched-vis.c @@ -1,6 +1,7 @@ /* Instruction scheduling pass. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 + Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) @@ -28,7 +29,6 @@ along with GCC; see the file COPYING3. If not see #include "obstack.h" #include "hard-reg-set.h" #include "basic-block.h" -#include "real.h" #include "insn-attr.h" #include "sched-int.h" #include "tree-pass.h" @@ -81,7 +81,7 @@ print_exp (char *buf, const_rtx x, int verbose) { case PLUS: op[0] = XEXP (x, 0); - if (GET_CODE (XEXP (x, 1)) == CONST_INT + if (CONST_INT_P (XEXP (x, 1)) && INTVAL (XEXP (x, 1)) < 0) { st[1] = "-"; @@ -429,6 +429,11 @@ print_value (char *buf, const_rtx x, int verbose) char t[BUF_LEN]; char *cur = buf; + if (!x) + { + safe_concat (buf, buf, "(nil)"); + return; + } switch (GET_CODE (x)) { case CONST_INT: @@ -506,6 +511,12 @@ print_value (char *buf, const_rtx x, int verbose) sprintf (t, "#%d", SUBREG_BYTE (x)); cur = safe_concat (buf, cur, t); break; + case STRICT_LOW_PART: + print_value (t, XEXP (x, 0), verbose); + cur = safe_concat (buf, cur, "strict_low_part("); + cur = safe_concat (buf, cur, t); + cur = safe_concat (buf, cur, ")"); + break; case SCRATCH: cur = safe_concat (buf, cur, "scratch"); break; @@ -521,6 +532,10 @@ print_value (char *buf, const_rtx x, int verbose) cur = safe_concat (buf, cur, t); cur = safe_concat (buf, cur, "]"); break; + case DEBUG_EXPR: + sprintf (t, "D#%i", DEBUG_TEMP_UID (DEBUG_EXPR_TREE_DECL (x))); + cur = safe_concat (buf, cur, t); + break; default: print_exp (t, x, verbose); cur = safe_concat (buf, cur, t); @@ -545,6 +560,9 @@ print_pattern (char *buf, const_rtx x, int verbose) case RETURN: sprintf (buf, "return"); break; + case SIMPLE_RETURN: + sprintf (buf, "simple_return"); + break; case CALL: print_exp (buf, x, verbose); break; @@ -556,6 +574,10 @@ print_pattern (char *buf, const_rtx x, int verbose) print_value (t1, XEXP (x, 0), verbose); sprintf (buf, "use %s", t1); break; + case VAR_LOCATION: + print_value (t1, PAT_VAR_LOCATION_LOC (x), verbose); + sprintf (buf, "loc %s", t1); + break; case COND_EXEC: if (GET_CODE (COND_EXEC_TEST (x)) == NE && XEXP (COND_EXEC_TEST (x), 1) == const0_rtx) @@ -592,7 +614,7 @@ print_pattern (char *buf, const_rtx x, int verbose) sprintf (buf, "asm {%s}", XSTR (x, 0)); break; case ADDR_VEC: - break; + /* Fall through. */ case ADDR_DIFF_VEC: print_value (buf, XEXP (x, 0), verbose); break; @@ -658,6 +680,41 @@ print_insn (char *buf, const_rtx x, int verbose) #endif sprintf (buf, " %4d %s", INSN_UID (x), t); break; + + case DEBUG_INSN: + { + const char *name = "?"; + + if (DECL_P (INSN_VAR_LOCATION_DECL (insn))) + { + tree id = DECL_NAME (INSN_VAR_LOCATION_DECL (insn)); + char idbuf[32]; + if (id) + name = IDENTIFIER_POINTER (id); + else if (TREE_CODE (INSN_VAR_LOCATION_DECL (insn)) + == DEBUG_EXPR_DECL) + { + sprintf (idbuf, "D#%i", + DEBUG_TEMP_UID (INSN_VAR_LOCATION_DECL (insn))); + name = idbuf; + } + else + { + sprintf (idbuf, "D.%i", + DECL_UID (INSN_VAR_LOCATION_DECL (insn))); + name = idbuf; + } + } + if (VAR_LOC_UNKNOWN_P (INSN_VAR_LOCATION_LOC (insn))) + sprintf (buf, " %4d: debug %s optimized away", INSN_UID (insn), name); + else + { + print_pattern (t, INSN_VAR_LOCATION_LOC (insn), verbose); + sprintf (buf, " %4d: debug %s => %s", INSN_UID (insn), name, t); + } + } + break; + case JUMP_INSN: print_pattern (t, PATTERN (x), verbose); #ifdef INSN_SCHEDULING @@ -721,7 +778,7 @@ dump_insn_slim (FILE *f, rtx x) } /* Emit a slim dump of X (an insn) to stderr. */ -void +DEBUG_FUNCTION void debug_insn_slim (rtx x) { dump_insn_slim (stderr, x); @@ -736,7 +793,7 @@ print_rtl_slim_with_bb (FILE *f, rtx first, int flags) print_rtl_slim (f, first, NULL, -1, flags); } -/* Same as above, but stop at LAST or when COUNT == 0. +/* Same as above, but stop at LAST or when COUNT == 0. If COUNT < 0 it will stop only at LAST or NULL rtx. */ void print_rtl_slim (FILE *f, rtx first, rtx last, int count, int flags) @@ -745,12 +802,12 @@ print_rtl_slim (FILE *f, rtx first, rtx last, int count, int flags) rtx insn, tail; tail = last ? NEXT_INSN (last) : NULL_RTX; - for (insn = first; - (insn != NULL) && (insn != tail) && (count != 0); + for (insn = first; + (insn != NULL) && (insn != tail) && (count != 0); insn = NEXT_INSN (insn)) { if ((flags & TDF_BLOCKS) - && (INSN_P (insn) || GET_CODE (insn) == NOTE) + && (INSN_P (insn) || NOTE_P (insn)) && BLOCK_FOR_INSN (insn) && !current_bb) { @@ -772,13 +829,13 @@ print_rtl_slim (FILE *f, rtx first, rtx last, int count, int flags) } } -void +DEBUG_FUNCTION void debug_bb_slim (struct basic_block_def *bb) { print_rtl_slim (stderr, BB_HEAD (bb), BB_END (bb), -1, 32); } -void +DEBUG_FUNCTION void debug_bb_n_slim (int n) { struct basic_block_def *bb = BASIC_BLOCK (n);