enable @restrict for slices?

Bruce Carneal bcarneal at gmail.com
Tue Sep 13 18:56:10 UTC 2022


Currently applying an @restrict attribute to a slice argument 
results in something like this from ldc:

```d
Attribute 'noalias' applied to incompatible type! i16 ({ i64, 
i16* })* ...
```


Might this be upgraded to match gdc's current behavior on 
godbolt? (allow @restrict for both pointers and slices)  I don't 
see a downside apart from the, hopefully modest, work required to 
get it in place.  On the upside, it would be nice to be able to 
use @restrict with somewhat safer, idiomatic code.

For reference, I've observed that @restrict helps the auto 
vectorizer in both gdc and ldc.  At a minimum it eliminates all 
the "lets check if these are overlapping" code.  It *may* help 
keep the auto-vectorizers engaged with more involved kernels. I 
have nothing to report on that yet but it makes sense as the 
costs are lowered somewhat and the analysis is simplified.

Assuming @restrict applies to slices in the future, the idiomatic 
form might be to attach @restrict to output buffer arguments 
passed to @trusted routines.  As you'd expect, both compilers "do 
the right thing" when read-only source arguments remain unadorned.



More information about the digitalmars-d-ldc mailing list