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:
parent
061ee39672
commit
b5fbe71648
@ -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
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user