<div dir="ltr"><div>Hi Arnold,</div><div><br></div><div>To sum up my intentions, I want to understand how the reduction/induction variable detection works in LLVM, so that I can know better how to detect different patterns in memory, not just the stride vectorization. </div>
<div><br></div><div>For instance, even if the relationship between each loop would be complicated, I know that in each loop, all three reads are sequential. So, at least, I could use a Load<3> rather than three loads. I guess this is why Nadav was hinting for the SLP vectorizer, not the loop vec. Since the operation on all three loaded values are exactly the same AND the writes are also sequential, I can reduce that to: load<3> -> op<3> -> store<3>. That should work even on machines that don't have de-interleaved access (assuming they're pointers to simple types, etc).</div>
<div><br></div><div><br></div>On 21 October 2013 17:29, Arnold Schwaighofer <span dir="ltr"><<a href="mailto:aschwaighofer@apple.com" target="_blank">aschwaighofer@apple.com</a>></span> wrote:<br><div class="gmail_extra">
<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">can you post a hand-created vectorized IR of how a reduction would work on your example?<br>
</blockquote><div><br></div><div>I'm not there yet, just trying to understand the induction/reduction code first and what comes out of it.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
I think the right approach to get examples like this is that we need to recognize strided pointer inductions (we only support strides by one currently).<br></blockquote><div><br></div><div>I see. I'll have a look at IK_PtrInduction and see what patterns I can spot.</div>
<div><br></div><div>Do you envisage a new IK type for strided induction, or just work with the PtrInduction to extend the concept of a non-unit stride (ie. separate Step from ElementSize)?</div><div><br></div><div>cheers,</div>
<div>--renato</div></div></div></div>