Hi!

This is something that has annyoed me for quite some time, but never got
around to do anything about it.  The EXPR_LIST mode in
CALL_INSN_FUNCTION_USAGE never means the various REG_DEAD/REG_CFA* etc.
note names, always normal mode, so e.g. when one is looking for REG_CFA*
notes, the calls can confuse it, and when looking at calls, one has to
look up the REG_* values and convert them to enum machine_mode in the
debugger.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2014-01-22  Jakub Jelinek  <ja...@redhat.com>

        * print-rtl.c (in_call_function_usage): New var.
        (print_rtx): When in CALL_INSN_FUNCTION_USAGE, always print
        EXPR_LIST mode as mode and not as reg note name.

--- gcc/print-rtl.c.jj  2014-01-03 11:40:57.000000000 +0100
+++ gcc/print-rtl.c     2014-01-22 18:50:59.094605279 +0100
@@ -51,6 +51,8 @@ static int sawclose = 0;
 
 static int indent;
 
+static bool in_call_function_usage;
+
 static void print_rtx (const_rtx);
 
 /* String printed at beginning of each RTL when it is dumped.
@@ -153,7 +155,8 @@ print_rtx (const_rtx in_rtx)
       if ((GET_CODE (in_rtx) == EXPR_LIST
           || GET_CODE (in_rtx) == INSN_LIST
           || GET_CODE (in_rtx) == INT_LIST)
-         && (int)GET_MODE (in_rtx) < REG_NOTE_MAX)
+         && (int)GET_MODE (in_rtx) < REG_NOTE_MAX
+         && !in_call_function_usage)
        fprintf (outfile, ":%s",
                 GET_REG_NOTE_NAME (GET_MODE (in_rtx)));
 
@@ -350,7 +353,14 @@ print_rtx (const_rtx in_rtx)
                   print_rtx_head, indent * 2, "");
        if (!sawclose)
          fprintf (outfile, " ");
-       print_rtx (XEXP (in_rtx, i));
+       if (i == 8 && CALL_P (in_rtx))
+         {
+           in_call_function_usage = true;
+           print_rtx (XEXP (in_rtx, i));
+           in_call_function_usage = false;
+         }
+       else
+         print_rtx (XEXP (in_rtx, i));
        indent -= 2;
        break;
 

        Jakub

Reply via email to