<div dir="ltr"><div class="gmail_default" style>On Fri, Jan 4, 2013 at 10:09 AM, Nadav Rotem <span dir="ltr"><<a href="mailto:nrotem@apple.com" target="_blank" class="cremed">nrotem@apple.com</a>></span> wrote:<br></div>
<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">Hi Hal,<br>
<br>
I spoke with chandler last night and he said that he ran comprehensive testing and he found two interesting things:<br>
<br>
1. When vectorizing everything with O2, the code gets 3% bigger, and as a result slower.  When it works it works really well, but most vectorizable loops are in the cold path.<br>
2. When disabling the pre-loop for loops that require: runtime checks, odd number of iterations, etc. Then the loop vectorizer does not catch much.<br>
<br>
At the moment it looks like it is better to mimic the gcc behavior and enable the loop vectorizer only on O3.<br></blockquote><div><br></div><div style>Also, we discussed a bunch of ideas for how to actually get a heuristic based vectorizer that can be tuned between O2 and O3 rather than just being off with one and on with another.</div>
<div style><br></div><div style>Hopefully we'll be able to make progress on those ideas -- I'm personally interested in finding a balance that can still vectorize the loops that are clearly profitable, but doesn't have the code size and performance penalty for code that doesn't directly benefit from it.</div>
<div style><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
Nadav<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On Jan 4, 2013, at 10:04 AM, Hal Finkel <<a href="mailto:hfinkel@anl.gov" class="cremed">hfinkel@anl.gov</a>> wrote:<br>
<br>
> ----- Original Message -----<br>
>> From: "Nadav Rotem" <<a href="mailto:nrotem@apple.com" class="cremed">nrotem@apple.com</a>><br>
>> To: <a href="mailto:llvm-commits@cs.uiuc.edu" class="cremed">llvm-commits@cs.uiuc.edu</a><br>
>> Sent: Friday, January 4, 2013 11:57:44 AM<br>
>> Subject: [llvm-commits] [llvm] r171471 -     /llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp<br>
>><br>
>> Author: nadav<br>
>> Date: Fri Jan  4 11:57:44 2013<br>
>> New Revision: 171471<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=171471&view=rev" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project?rev=171471&view=rev</a><br>
>> Log:<br>
>> Move the loop vectorizer from O2 to O3. It looks like the increase in<br>
>> code size actually hurts the performance on many programs.<br>
><br>
> Can you be specific about what code size increase? (runtime checks, if conversion, unrolling)? And what does this have to do with moving the vectorizer from -02 to -O3? To be clear, I don't object to the change (enabling autovectorization at -O3 seems pretty standard these days).<br>

><br>
> Thanks again,<br>
> Hal<br>
><br>
>><br>
>> Modified:<br>
>>    llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp?rev=171471&r1=171470&r2=171471&view=diff" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp?rev=171471&r1=171470&r2=171471&view=diff</a><br>

>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp Fri Jan  4<br>
>> 11:57:44 2013<br>
>> @@ -187,7 +187,7 @@<br>
>>   MPM.add(createLoopIdiomPass());             // Recognize idioms<br>
>>   like memset.<br>
>>   MPM.add(createLoopDeletionPass());          // Delete dead loops<br>
>><br>
>> -  if (LoopVectorize && OptLevel > 1)<br>
>> +  if (LoopVectorize && OptLevel > 2)<br>
>>     MPM.add(createLoopVectorizePass());<br>
>><br>
>>   if (!DisableUnrollLoops)<br>
>><br>
>><br>
>> _______________________________________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@cs.uiuc.edu" class="cremed">llvm-commits@cs.uiuc.edu</a><br>
>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank" class="cremed">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
>><br>
><br>
> --<br>
> Hal Finkel<br>
> Postdoctoral Appointee<br>
> Leadership Computing Facility<br>
> Argonne National Laboratory<br>
<br>
</div></div></blockquote></div><br></div></div>