<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Hi,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Later found out this is because some Newlib headers defined __restrict as empty. __restrict__ seems to work...</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">What's the supposed difference between __restrict and __restrict__?</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Thanks,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Bandhav</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jun 28, 2020 at 1:18 AM Bandhav Veluri <<a href="mailto:bandhav.veluri00@gmail.com">bandhav.veluri00@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Hi,<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-size:small"><span style="font-family:arial,helvetica,sans-serif">I am observing a strange behaviour in which Clang ignores </span><font face="monospace">__restirct</font><font face="arial, helvetica, sans-serif"> when I include some standard headers.</font></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">For example, this code:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><div class="gmail_default"><font face="monospace">void vec_add(int* __restrict a,<br>             int* __restrict b,<br>             int n) {<br>  #pragma unroll 4<br>  for(int i=0; i<n; ++i) {<br>    a[i] += b[i];<br>  }<br>}</font><br></div><div class="gmail_default"><div class="gmail_default"></div></div></div><div class="gmail_default" style="font-size:small"><br><font face="monospace"></font></div><div class="gmail_default" style="font-size:small"><font face="arial, sans-serif">results in:</font></div><div class="gmail_default" style="font-size:small"><div class="gmail_default"><div class="gmail_default"><font face="monospace">; Function Attrs: nofree norecurse nounwind<br>define dso_local void @_Z7vec_addPiS_i(i32* noalias nocapture %a, i32* noalias nocapture readonly %b, i32 %n) local_unnam<br>ed_addr #0 {<br>entry:</font><font face="arial, sans-serif"><br></font></div><div class="gmail_default"><font face="monospace">.</font></div><div class="gmail_default"><font face="monospace">.</font></div><div class="gmail_default"><font face="monospace">...</font></div><div class="gmail_default"><font face="arial, sans-serif">(note the </font><font face="monospace">noalias</font><font face="arial, sans-serif">s before function arguments).</font><font face="monospace"><br></font></div><div class="gmail_default"></div></div><div class="gmail_default"></div></div><div class="gmail_default" style="font-size:small"><font face="monospace"></font><br></div><div class="gmail_default" style="font-size:small">But this code:</div><div class="gmail_default" style="font-size:small"><div class="gmail_default"><font face="monospace"> #include <cmath><br><br> void vec_add(int* __restrict a,<br>              int* __restrict b,<br>              int n) {<br>   #pragma unroll 4<br>   for(int i=0; i<n; ++i) {<br>     a[i] += b[i];<br>   }<br> }</font></div><div class="gmail_default"><font face="monospace"><br></font></div></div><div class="gmail_default" style="font-size:small"><font face="arial, sans-serif">results in:</font></div><div class="gmail_default" style="font-size:small"><div class="gmail_default"><font face="monospace">; Function Attrs: nofree norecurse nounwind<br>define dso_local void @_Z7vec_addPiS_i(i32* nocapture %a, i32* nocapture readonly %b, i32 %n) local_unnamed_addr #0 {<br>entry:<br>  %cmp6 = icmp sgt i32 %n, 0<br>  br i1 %cmp6, label %for.body.preheader, label %for.cond.cleanup</font></div><div class="gmail_default"><font face="monospace">.</font></div><div class="gmail_default"><font face="monospace">.</font></div><div class="gmail_default"><font face="monospace">...<br></font></div></div><div class="gmail_default" style="font-size:small"></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 running this with LLVM RISC-V backend using RISC-V GCC compiled Newlib as the C/C++ library.</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">Is it not okay to use GCC libraries with LLVM? Or could this be a specific issue with Newlib's header files misinterpreted by Clang?</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">Thank you,</font></div><div class="gmail_default" style="font-size:small"><font face="arial, sans-serif">Bandhav</font></div></div>
</blockquote></div>