+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
}
}
+/* 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
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))
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;
/* 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);
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);
}