C `restrict` keyword in D

Dukc via Digitalmars-d digitalmars-d at puremagic.com
Tue Sep 5 08:46:13 PDT 2017


On Monday, 4 September 2017 at 18:03:51 UTC, Johan Engelen wrote:
>
> It's need for auto-vectorization, for example.
>
> I would support an LDC PR for adding a magic UDA to be able to 
> attach 'restrict' with C-semantics to function parameters. E.g.
> ```
>  // add restrict to parameters 1 and 2
> void foo(int, int*, int*) @restrict(1,2)
> ```

That probably explains it in case of c. But I still think that D 
might be able to do this better without language changes. This 
way (not compiler-checked for errors):
```
for(int i = 0; i < a.length; i+=8)
{   int[8] aVec = a[i .. i+8], bVec = b[i .. i+8], cVec;
     foreach(j; 0 .. 8) cVec[j] = aVec[j].foo(bVec[j]);
     c[i .. i+8] = cVec[];
}
```

Of course, if we want to support this we should construct a 
high-level library template that chooses the correct vector size 
for the platform, eliminates that outer for loop and handles 
uneven array lenghts.


More information about the Digitalmars-d mailing list