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 <[email protected]> * 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
