rtx_writer: avoid printing trailing default values

gcc/ChangeLog:
	* print-rtl.c (rtx_writer::operand_has_default_value_p): New
	method.
	(rtx_writer::print_rtx): In compact mode, omit trailing operands
	that have the default values.
	* print-rtl.h (rtx_writer::operand_has_default_value_p): New
	method.
	* rtl-tests.c (selftest::test_dumping_insns): Remove empty
	label string from expected dump.
	(seltest::test_uncond_jump): Remove trailing "(nil)" for REG_NOTES
	from expected dump.

From-SVN: r241908
This commit is contained in:
David Malcolm 2016-11-07 15:19:17 +00:00 committed by David Malcolm
parent 061ee39672
commit b5fbe71648
4 changed files with 63 additions and 4 deletions

View File

@ -1,3 +1,16 @@
2016-11-07 David Malcolm <dmalcolm@redhat.com>
* print-rtl.c (rtx_writer::operand_has_default_value_p): New
method.
(rtx_writer::print_rtx): In compact mode, omit trailing operands
that have the default values.
* print-rtl.h (rtx_writer::operand_has_default_value_p): New
method.
* rtl-tests.c (selftest::test_dumping_insns): Remove empty
label string from expected dump.
(seltest::test_uncond_jump): Remove trailing "(nil)" for REG_NOTES
from expected dump.
2016-11-07 Jakub Jelinek <jakub@redhat.com>
PR target/77834

View File

@ -564,6 +564,43 @@ rtx_writer::print_rtx_operand (const_rtx in_rtx, int idx)
}
}
/* Subroutine of rtx_writer::print_rtx.
In compact mode, determine if operand IDX of IN_RTX is interesting
to dump, or (if in a trailing position) it can be omitted. */
bool
rtx_writer::operand_has_default_value_p (const_rtx in_rtx, int idx)
{
const char *format_ptr = GET_RTX_FORMAT (GET_CODE (in_rtx));
switch (format_ptr[idx])
{
case 'e':
case 'u':
return XEXP (in_rtx, idx) == NULL_RTX;
case 's':
return XSTR (in_rtx, idx) == NULL;
case '0':
switch (GET_CODE (in_rtx))
{
case JUMP_INSN:
/* JUMP_LABELs are always omitted in compact mode, so treat
any value here as omittable, so that earlier operands can
potentially be omitted also. */
return m_compact;
default:
return false;
}
default:
return false;
}
}
/* Print IN_RTX onto m_outfile. This is the recursive part of printing. */
void
@ -681,9 +718,18 @@ rtx_writer::print_rtx (const_rtx in_rtx)
fprintf (m_outfile, " %d", INSN_UID (in_rtx));
}
/* Determine which is the final operand to print.
In compact mode, skip trailing operands that have the default values
e.g. trailing "(nil)" values. */
int limit = GET_RTX_LENGTH (GET_CODE (in_rtx));
if (m_compact)
while (limit > idx && operand_has_default_value_p (in_rtx, limit - 1))
limit--;
/* Get the format string and skip the first elements if we have handled
them already. */
for (; idx < GET_RTX_LENGTH (GET_CODE (in_rtx)); idx++)
for (; idx < limit; idx++)
print_rtx_operand (in_rtx, idx);
switch (GET_CODE (in_rtx))

View File

@ -39,6 +39,7 @@ class rtx_writer
void print_rtx_operand_code_r (const_rtx in_rtx);
void print_rtx_operand_code_u (const_rtx in_rtx, int idx);
void print_rtx_operand (const_rtx in_rtx, int idx);
bool operand_has_default_value_p (const_rtx in_rtx, int idx);
private:
FILE *m_outfile;

View File

@ -122,7 +122,7 @@ test_dumping_insns ()
/* Labels. */
rtx_insn *label = gen_label_rtx ();
CODE_LABEL_NUMBER (label) = 42;
ASSERT_RTL_DUMP_EQ ("(clabel 0 42 \"\")\n", label);
ASSERT_RTL_DUMP_EQ ("(clabel 0 42)\n", label);
LABEL_NAME (label)= "some_label";
ASSERT_RTL_DUMP_EQ ("(clabel 0 42 (\"some_label\"))\n", label);
@ -176,8 +176,7 @@ test_uncond_jump ()
ASSERT_TRUE (control_flow_insn_p (jump_insn));
ASSERT_RTL_DUMP_EQ ("(cjump_insn 1 (set (pc)\n"
" (label_ref 0))\n"
" (nil))\n",
" (label_ref 0)))\n",
jump_insn);
}