Message ID | 1478286848-7165-1-git-send-email-dmalcolm@redhat.com |
---|---|
State | New |
Headers | show |
On 11/04/2016 08:14 PM, David Malcolm wrote: > > With this, compact dumps omit the trailing (nil) for both regular insns > and for JUMP_INSNs, and omits the surplus newline seen in my earlier patch. > > It also appears removes the trailing (nil) from expr_list. > > Bootstrap®rtest in progress. > > OK for trunk if it passes? This seems OK, with something left to be addressed perhaps in a followup: > + case JUMP_INSN: > + return JUMP_LABEL (in_rtx) == NULL_RTX; Weren't we going to omit JUMP_LABELs in compact mode? If so, we'll need a m_compact test here eventually as well. Bernd
On Fri, 2016-11-04 at 19:53 +0100, Bernd Schmidt wrote: > On 11/04/2016 08:14 PM, David Malcolm wrote: > > > > With this, compact dumps omit the trailing (nil) for both regular > > insns > > and for JUMP_INSNs, and omits the surplus newline seen in my > > earlier patch. > > > > It also appears removes the trailing (nil) from expr_list. > > > > Bootstrap®rtest in progress. > > > > OK for trunk if it passes? > > This seems OK, with something left to be addressed perhaps in a > followup: > > > + case JUMP_INSN: > > + return JUMP_LABEL (in_rtx) == NULL_RTX; > > Weren't we going to omit JUMP_LABELs in compact mode? If so, we'll > need > a m_compact test here eventually as well. We already omit JUMP_LABELs in compact mode, in rtx_writer::print_rtx_operand_code_0, but we need this test to pass so that we can potentially omit earlier (nil) operands in a JUMP_INSN e.g. REG_NOTES. Given that, perhaps this test should read: 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 true; or: return m_compact; if we want to support calling operand_has_default_value_p in non -compact mode. OK with one of those changes? (assuming successful testing)
On 11/04/2016 08:25 PM, David Malcolm wrote:
> return m_compact;
Ok with this one plus a comment.
Bernd
diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c index 341ecdf..493aa68 100644 --- a/gcc/print-rtl.c +++ b/gcc/print-rtl.c @@ -564,6 +564,40 @@ 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. */ + +static bool +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: + return JUMP_LABEL (in_rtx) == NULL_RTX; + + default: + return false; + + } + + default: + return false; + } +} + /* Print IN_RTX onto m_outfile. This is the recursive part of printing. */ void @@ -681,9 +715,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)) diff --git a/gcc/rtl-tests.c b/gcc/rtl-tests.c index cf5239f..228226b 100644 --- a/gcc/rtl-tests.c +++ b/gcc/rtl-tests.c @@ -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); }