<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Sep 15, 2021, at 18:04, Momchil Velikov <<a href="mailto:momchil.velikov@gmail.com" class="">momchil.velikov@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">On Wed, Sep 15, 2021 at 5:17 PM Sjoerd Meijer <<a href="mailto:Sjoerd.Meijer@arm.com" class="">Sjoerd.Meijer@arm.com</a>> wrote:<br class=""><blockquote type="cite" class="">The SLP vectoriser will fail to vectorise this because it wasn't taught to emit runtime alias analysis checks.<br class=""></blockquote><br class="">It likely needs more than that - manually hoisting all the loads and<br class="">adding `restrict` still does not vectorise at `-O3`:<br class=""><a href="https://gcc.godbolt.org/z/z3KjaYv9d" class="">https://gcc.godbolt.org/z/z3KjaYv9d</a><br class=""></div></div></blockquote></div><br class=""><div class="">Besides alias runtime checks for SLP, there’s an additional problem: SLP doesn’t really do if-conversion at the moment for this case and instead relies on SimplifyCFG. SimplifyCFG’s if-conversion doesn’t trigger, because there are too many instructions to duplicate. If we give SimplifyCFG more leeway (-mllvm -two-entry-phi-node-folding-threshold=10), it also gets vectorized with -O3: <a href="https://gcc.godbolt.org/z/qarnMbo5M" class="">https://gcc.godbolt.org/z/qarnMbo5M</a></div><div class=""><br class=""></div><div class="">Ideally the SLP vectorizer would be able to perform vector if conversion directly when profitable. That way, we will also vectorize in cases where LV doesn’t kick in (e.g. due to very low trip counts) or if there’s no loop to start with.</div><div class=""><br class=""></div><div class="">Cheers,</div><div class="">Florian</div></body></html>