<div dir="ltr"><div class="gmail_default" style="font-size:small"><font face="arial, sans-serif">Hi,</font></div><div class="gmail_default" style="font-size:small"><font face="arial, sans-serif"><br></font></div><div class="gmail_default" style="font-size:small"><font face="arial, sans-serif">I'm trying to abstract some special pointers with a class, like in the example program below:</font></div><div class="gmail_default" style="font-size:small"><span style="font-family:arial,sans-serif"><br></span></div><div class="gmail_default" style="font-size:small"><font face="monospace">  1 #define __remote __attribute__((address_space(1)))<br>  2 #include <stdint.h><br>  3<br>  4 __remote int* A;<br>  5 __remote int* B;<br>  6<br>  7 class RemotePtr {<br>  8   private:<br>  9     __remote int* __restrict a;<br> 10<br> 11   public:<br> 12     RemotePtr(__remote int* a) : a(a) {}<br> 13<br> 14     __remote int& at(int n) {<br> 15       return a[n];<br> 16     }<br> 17 };<br> 18<br> 19 int main(int argc, char** argv) {<br> 20   RemotePtr a(A);<br> 21   RemotePtr b(B);<br> 22<br> 23   #pragma unroll 4<br> 24   for(int i=0; i<4; ++i) {<br> 25     <a href="http://a.at">a.at</a>(i) += <a href="http://b.at">b.at</a>(i);<br> 26   }<br> 27<br> 28   return 0;<br> 29 }</font><br></div><div class="gmail_default" style="font-size:small"><font face="monospace"><br></font></div><div class="gmail_default" style="font-size:small"><span style="font-family:arial,sans-serif">It's given that pointer </span><font face="monospace">a,</font><span style="font-family:arial,sans-serif"> in each object of the class </span><font face="monospace">RemotePtr,</font><span style="font-family:arial,sans-serif"> is the only pointer that can access the array pointed by it. So, I tried </span><font face="monospace">__remote int* __restrict a;</font> (line 9) construct to tell Clang the same. This doesn't seem to work and I see no <font face="monospace">nolias</font>s in the generated IR. Specifically, I want lines 23-26 optimized assuming no aliasing between <font face="monospace">A</font> and <font face="monospace">B</font>. Any reason why Clang shouldn't annotate memory accesses in lines 23-26 with <font face="monospace">noalias</font>s taking line 9 into account?<font face="monospace"><br></font></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">The higher level problem is this: is there a way to compile lines 23-26 assuming no aliasing between <font face="monospace">A</font> and <font face="monospace">B,</font> by just doing something in the <font face="monospace">RemotePtr</font> class (so that <font face="monospace">main</font> is clear of ugly code)? If that's not possible, is there a way to tell Clang that lines 23-26 should assume no aliasing at all, by some pragma?</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Thank you,</div><div class="gmail_default" style="font-size:small">Bandhav</div></div>