[gomp4] mangle linear step of 1 with just 'l'

Jakub Jelinek jakub@redhat.com
Sat Nov 2 15:50:00 GMT 2013


On Sat, Nov 02, 2013 at 08:25:28AM -0500, Aldy Hernandez wrote:
> 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?

Ah, I was reading just the grammar and it didn't look like the number was
optional.

BTW, as I said on IRC yesterday, for say:
#pragma omp declare simd simdlen(8) notinbranch
int foo (int a, int b);
in the 'x' ISA (i.e. SSE2), we are supposed to pass it as
typedef int V __attribute__((vector_size (16)));
foo (V a.1, V a.2, V b.1, V b.2)
which probably isn't that hard for arguments, but are supposed to return
also the return value in two V registers (%xmm0/%xmm1).  We can't pass that
as vector(8) int, so perhaps pretend the return value is ARRAY_TYPE of
2 vector(4) ints and have some special code in the backend to pass that
return value in two xmm registers.  Similarly for 4 and 8.

	Jakub



More information about the Gcc-patches mailing list