summaryrefslogtreecommitdiff
path: root/gcc/print-rtl.c
diff options
context:
space:
mode:
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>1993-01-26 00:30:34 +0000
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>1993-01-26 00:30:34 +0000
commit1c8c3750cba039138be1d719933f00c20865957b (patch)
tree5fb2668b5b1c11ba45b1066be5167b66af578c24 /gcc/print-rtl.c
parentb35bc2a34409f0e9c11eb4d27c244cc42d5ee626 (diff)
downloadgcc-1c8c3750cba039138be1d719933f00c20865957b.tar.gz
Added debugging utilities debug_rtx_list to print several rtx's and
debug_rtx_find to look up an rtx in a list given a uid. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@3343 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/print-rtl.c')
-rw-r--r--gcc/print-rtl.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c
index 60e3ca929b3..651659eb924 100644
--- a/gcc/print-rtl.c
+++ b/gcc/print-rtl.c
@@ -230,6 +230,64 @@ debug_rtx (x)
fprintf (stderr, "\n");
}
+/* Count of rtx's to print with debug_rtx_list.
+ This global exists because gdb user defined commands have no arguments. */
+
+int debug_rtx_count = 0; /* 0 is treated as equivalent to 1 */
+
+/* Call this function to print list from X on.
+
+ N is a count of the rtx's to print. Positive values print from the specified
+ rtx on. Negative values print a window around the rtx.
+ 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;
+{
+ int i,count;
+ rtx insn;
+
+ count = n == 0 ? 1 : n < 0 ? -n : n;
+
+ /* If we are printing a window, back up to the start. */
+
+ if (n < 0)
+ for (i = count / 2; i > 0; i--)
+ {
+ if (PREV_INSN (x) == 0)
+ break;
+ x = PREV_INSN (x);
+ }
+
+ for (i = count, insn = x; i > 0 && insn != 0; i--, insn = NEXT_INSN (insn))
+ debug_rtx (insn);
+}
+
+/* Call this function to search an rtx list to find one with insn uid UID,
+ and then call debug_rtx_list to print it, using DEBUG_RTX_COUNT.
+ The found insn is returned to enable further debugging analysis. */
+
+rtx
+debug_rtx_find(x, uid)
+ rtx x;
+ int uid;
+{
+ while (x != 0 && INSN_UID (x) != uid)
+ x = NEXT_INSN (x);
+ if (x != 0)
+ {
+ debug_rtx_list (x, debug_rtx_count);
+ return x;
+ }
+ else
+ {
+ fprintf (stderr, "insn uid %d not found\n", uid);
+ return 0;
+ }
+}
+
/* External entry point for printing a chain of insns
starting with RTX_FIRST onto file OUTF.
A blank line separates insns.