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)