Hi!

On this testcase we get (vec_series (reg: ebp) (const_int 1))
in NOTE_INSN_CALL_ARG_LOCATION because the vector isn't live anywhere else.
Right now we do not have a good story for providing values of optimized
out vectors, so just punting on it like on other VEC_* codes is sufficient.

For the future, the question is how to represent vectors, they could be
represented e.g. using typed DWARF stack, but then the stack could have
really large values, or by representing them as arrays of elements using
DW_OP_piece, which probably current consumers would grok already now,
but the debug info for it could be larger (say:
typedef int V __attribute__((vector_size (32)));
V bar (V, V);

V
foo (V a, V b)
{
  V c = a + b;
  return bar (a, b) + a;
}
to represent c we either have typed stack ... DW_OP_plus DW_OP_stack_value,
or ( ... DW_OP_plus DW_OP_stack_value DW_OP_piece ... ) 8x

Anyway, for now I think this is enough.  Bootstrapped/regtested on
x86_64-linux and i686-linux, ok for trunk?

2017-11-22  Jakub Jelinek  <ja...@redhat.com>

        PR debug/83034
        * dwarf2out.c (mem_loc_descriptor): Handle VEC_SERIES.

        * gcc.dg/pr83034.c: New test.

--- gcc/dwarf2out.c.jj  2017-11-21 08:56:52.000000000 +0100
+++ gcc/dwarf2out.c     2017-11-21 16:08:34.397197696 +0100
@@ -15605,6 +15605,7 @@ mem_loc_descriptor (rtx rtl, machine_mod
     case VEC_SELECT:
     case VEC_CONCAT:
     case VEC_DUPLICATE:
+    case VEC_SERIES:
     case UNSPEC:
     case HIGH:
     case FMA:
--- gcc/testsuite/gcc.dg/pr83034.c.jj   2017-11-21 16:07:13.886253031 +0100
+++ gcc/testsuite/gcc.dg/pr83034.c      2017-11-21 16:03:23.000000000 +0100
@@ -0,0 +1,12 @@
+/* PR debug/83034 */
+/* { dg-do compile } */
+/* { dg-options "-funroll-loops -Ofast -g" } */
+
+__attribute__((__simd__)) float expf (float);
+
+void
+foo (float *a, int x)
+{
+  for (; x; x++)
+    a[x] = expf (x);
+}

        Jakub

Reply via email to