Hi Jakub.

Your patch mangling negative linear steps caused a regression in simd-clones-2.c. Well, it already had a failure, but now it has two :).

The problem is that AFAIU, a linear step of 1, is mangled with just 'l', not 'l1'.

I am not completely sure of this, and was hoping Balaji could clear this up, but on page 7 of the Intel vector ABI document, the example for:

__declspec(vector(uniform(a), aligned(a:32), linear(k:1)))
extern float setArray(float *a, float x, int k)

...is mangled as _ZGVxN4ua32vl_setArray, and in the subsequent explanatory paragraph, the document specifically says:

        ā€œlā€ indicates linear(k:1) – k is a linear variable whose stride is 1.

However, since the spec itself says nothing about a default linear stride 1, I don't know whether this is an oversight in the BNF grammar or a typo in the example. Balaji?

If a linear step of 1 is mangled as 'l' as the example suggests, then I'd like to commit the following patch.

Aldy
gcc/ChangeLog.gomp
        * omp-low.c (simd_clone_mangle): Linear step of 1 is mangled as
        'l'.


diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index d30fb17..e895cca 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -10825,9 +10825,9 @@ simd_clone_mangle (struct cgraph_node *old_node, struct 
cgraph_node *new_node)
        {
          gcc_assert (arg.linear_step != 0);
          pp_character (&pp, 'l');
-         if (arg.linear_step > 0)
+         if (arg.linear_step > 1)
            pp_unsigned_wide_integer (&pp, arg.linear_step);
-         else
+         else if (arg.linear_step < 0)
            {
              pp_character (&pp, 'n');
              pp_unsigned_wide_integer (&pp, (-(unsigned HOST_WIDE_INT)

Reply via email to