<div dir="ltr">On 19 June 2013 11:32, Francois Pichet <span dir="ltr"><<a href="mailto:pichet2000@gmail.com" target="_blank">pichet2000@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>I am talking about something like this:</div>
<div>     vldr    d16, [sp, #8]<br></div></div></blockquote><div><br></div><div style>Hi Francois,</div><div style><br></div><div style>This is just using the offset, not updating the register (see ARM ARM A8.5). Post-increment only has meaning if you write-back the new value to the register like:</div>
<div style><br></div><div style>  vldr  d16, [sp], #8</div><div style><br></div><div style>Did you mean write-back? or just offset?</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div></div><div>Does anybody know any C/C++ code example that will generate such code (especially loop)? Is this supported by the auto-vectorizer?<br></div></div></blockquote><div></div></div><br></div><div class="gmail_extra" style>
It's not simple to go from a loop in C++ to an instruction in machine code, especially when you're considering the vectorizer. Today you can generate a post-indexing load, tomorrow a pre-indexing load, and the next day a simple offset. All depending on how the IR is constructed, changed and lowered, all of which change daily.</div>
<div class="gmail_extra" style><br></div><div class="gmail_extra" style>The quickest and surest way to generate NEON instructions is with NEON intrinsics, but even so, LLVM is allowed to twist your code to generate better instructions than you have thought possible. You can try to create an IR that can generate post-indexed VLDRs on ARM, but that will not guarantee it'll generate the same on any other backend.<br>
</div><div class="gmail_extra" style><br></div><div class="gmail_extra" style>A code that will generate post-indexed loads in ARM, might generate a completely different instruction on Intel, or on your backend. What you have to do is to understand the patterns that vectorized code has in IR, possibly copy what's been done by other backends to lower such IR, and make sure your backend uses the post-indexed load for the cases you care about.</div>
<div class="gmail_extra" style><br></div><div class="gmail_extra" style>Makes sense?</div><div class="gmail_extra" style><br></div><div class="gmail_extra" style>cheers,</div><div class="gmail_extra" style>--renato</div></div>