On April 14, 2021 5:10:26 PM GMT+02:00, Richard Sandiford via Gcc-patches 
<gcc-patches@gcc.gnu.org> wrote:
>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.
>
>Tested on aarch64-linux-gnu, arm-linux-gnueabihf, armeb-eabi
>and x86_64-linux-gnu.  OK to install now, or should it wait
>until GCC 12?  (It only affects SVE in practice.)

Ok now (it should be harmless, no?) 

Thanks, 
Richard. 

>Richard
>
>
>gcc/
>       * print-rtl.c (rtx_writer::print_rtx_operand_codes_E_and_V): Print
>       more information about variable-length CONST_VECTORs.
>---
> gcc/print-rtl.c | 32 +++++++++++++++++++++++++++++++-
> 1 file changed, 31 insertions(+), 1 deletion(-)
>
>diff --git a/gcc/print-rtl.c b/gcc/print-rtl.c
>index c7982bce507..081fc50fab8 100644
>--- a/gcc/print-rtl.c
>+++ b/gcc/print-rtl.c
>@@ -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)

Reply via email to