Better const_vector printing
Looking at PR99929 showed that we weren't dumping enough information about variable-length CONST_VECTORs. Something like: (const_vector:VNx4SI [(const_int 1) (const_int 0)]) could be either: (a) 1, 0, 1, 0, repeating (b) 1 followed by all zeros This patch adds more information to the dumps. There are four cases: (a) above: (const_vector:VNx4SI repeat [ (const_int 1) (const_int 0) ]) (b) above: (const_vector:VNx4SI [ (const_int 1) repeat [ (const_int 0) ] ]) a single stepped sequence: (const_vector:VNx4SI [ (const_int 0) stepped [ (const_int 1) (const_int 2) ] ]) interleaved stepped sequences: (const_vector:VNx4SI [ (const_int 0) (const_int 40) stepped (interleave 2) [ (const_int 1) (const_int 41) (const_int 2) (const_int 42) ] ]) There are probably better syntaxes, but hopefully this is at least an improvement on the status quo. gcc/ * print-rtl.c (rtx_writer::print_rtx_operand_codes_E_and_V): Print more information about variable-length CONST_VECTORs.
This commit is contained in:
parent
00a2774923
commit
1fce5932a3
1 changed files with 31 additions and 1 deletions
|
@ -370,6 +370,10 @@ rtx_writer::print_rtx_operand_codes_E_and_V (const_rtx in_rtx, int idx)
|
|||
print_rtx_head, m_indent * 2, "");
|
||||
m_sawclose = 0;
|
||||
}
|
||||
if (GET_CODE (in_rtx) == CONST_VECTOR
|
||||
&& !GET_MODE_NUNITS (GET_MODE (in_rtx)).is_constant ()
|
||||
&& CONST_VECTOR_DUPLICATE_P (in_rtx))
|
||||
fprintf (m_outfile, " repeat");
|
||||
fputs (" [", m_outfile);
|
||||
if (XVEC (in_rtx, idx) != NULL)
|
||||
{
|
||||
|
@ -377,12 +381,32 @@ rtx_writer::print_rtx_operand_codes_E_and_V (const_rtx in_rtx, int idx)
|
|||
if (XVECLEN (in_rtx, idx))
|
||||
m_sawclose = 1;
|
||||
|
||||
int barrier = XVECLEN (in_rtx, idx);
|
||||
if (GET_CODE (in_rtx) == CONST_VECTOR
|
||||
&& !GET_MODE_NUNITS (GET_MODE (in_rtx)).is_constant ())
|
||||
barrier = CONST_VECTOR_NPATTERNS (in_rtx);
|
||||
|
||||
for (int j = 0; j < XVECLEN (in_rtx, idx); j++)
|
||||
{
|
||||
int j1;
|
||||
|
||||
if (j == barrier)
|
||||
{
|
||||
fprintf (m_outfile, "\n%s%*s",
|
||||
print_rtx_head, m_indent * 2, "");
|
||||
if (!CONST_VECTOR_STEPPED_P (in_rtx))
|
||||
fprintf (m_outfile, "repeat [");
|
||||
else if (CONST_VECTOR_NPATTERNS (in_rtx) == 1)
|
||||
fprintf (m_outfile, "stepped [");
|
||||
else
|
||||
fprintf (m_outfile, "stepped (interleave %d) [",
|
||||
CONST_VECTOR_NPATTERNS (in_rtx));
|
||||
m_indent += 2;
|
||||
}
|
||||
|
||||
print_rtx (XVECEXP (in_rtx, idx, j));
|
||||
for (j1 = j + 1; j1 < XVECLEN (in_rtx, idx); j1++)
|
||||
int limit = MIN (barrier, XVECLEN (in_rtx, idx));
|
||||
for (j1 = j + 1; j1 < limit; j1++)
|
||||
if (XVECEXP (in_rtx, idx, j) != XVECEXP (in_rtx, idx, j1))
|
||||
break;
|
||||
|
||||
|
@ -393,6 +417,12 @@ rtx_writer::print_rtx_operand_codes_E_and_V (const_rtx in_rtx, int idx)
|
|||
}
|
||||
}
|
||||
|
||||
if (barrier < XVECLEN (in_rtx, idx))
|
||||
{
|
||||
m_indent -= 2;
|
||||
fprintf (m_outfile, "\n%s%*s]", print_rtx_head, m_indent * 2, "");
|
||||
}
|
||||
|
||||
m_indent -= 2;
|
||||
}
|
||||
if (m_sawclose)
|
||||
|
|
Loading…
Add table
Reference in a new issue