<div dir="auto"><div><div class="gmail_extra"><div class="gmail_quote">Am 10.12.2017 20:01 schrieb "J. Gareth Moreton" <<a href="mailto:gareth@moreton-family.com">gareth@moreton-family.com</a>>:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The idea I had currently (this is without<br>
looking at any previous theory) was to use<br>
a kind of sliding window, similar to how<br>
ZIP and other LZ77-based algorithms work<br>
when compressing repeating strings, to<br>
look backwards in the current block for a<br>
matching command and then scan forward. If<br>
the scan gets up to the instruction right<br>
before the starting point, then it's<br>
potential for vectorisable code. Using the<br>
previous example:<br>
<div class="quoted-text"><br>
movss 16(%rsp),%xmm0<br>
addss 32(%rsp),%xmm0<br>
movss %xmm0,(%rax)<br>
movss 20(%rsp),%xmm0<br>
addss 36(%rsp),%xmm0<br>
movss %xmm0,4(%rax)<br>
<br>
</div>Starting at the 4th command, it looks back<br>
to find a match in the 1st command, albeit<br>
with Ann address that differs only by 4.<br>
As it scans forward, it finds similar<br>
matches in subsequent commands, and<br>
eventually realises the entire block could<br>
potentially be vectorised. If it<br>
continues, it finds the code fragment<br>
repeats 4 times and can be vectorised with<br>
little difficulty. Being only SSE commands<br>
helps too.<br></blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">The preferred way would be to detect this on the parser side (with the AST)  not on the code generator side as then this can be more easily implemented for different platforms. </div><div dir="auto"><br></div><div dir="auto">Regards, </div><div dir="auto">Sven</div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"></blockquote></div></div></div></div>