<div dir="ltr">Also, the difference between X86 and AArch64 is that on X86, the vectorizer decides not to unroll.</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 24, 2017 at 1:46 PM, Michael Kuperstein <span dir="ltr"><<a href="mailto:mkuper@google.com" target="_blank">mkuper@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Tue, Jan 24, 2017 at 1:20 PM, Sanjay Patel via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><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><div><br></div>I started looking at the log files that you attached, and I'm confused. The code that is supposedly causing the perf regression is created by the loop vectorizer, right? Except the bad code is not in the "vector.body", so is there something peculiar about this benchmark that the hot loop is not the vector loop? But there's another mystery: there are no vector ops in the "vector.body"!<br><br></div></div></blockquote><div><br></div></span>I haven't looked at this particular example, but this isn't very rare.</div><div class="gmail_quote"><br></div><div class="gmail_quote">1) The vectorizer actually doubles as an unroller, under some circumstances. So it's conceivable to have a vector.body without vector instructions.</div><div class="gmail_quote"><br></div><div class="gmail_quote">2) From what was pasted above, the "bad" code is in the runtime checks that LV generates.</div><div class="gmail_quote">The general problem is that if we don't know what the loop count of a loop is going to be, we assume it's high, so the cost of the runtime checks is negligible. This fails if we have a loop with a low (but statically unknown) trip-count nested inside a hot loop with a high trip-count. In this case, the overhead from the runtime checks, that end up being inside the outer loop, may cost more than what we gain from vectorization.</div><div class="gmail_quote">To try to avoid this, we have a threshold that prevents us from generating too costly runtime checks, but I guess this particular check is not considered complex enough.</div><div class="gmail_quote"><br></div></div></div>
</blockquote></div><br></div>