[llvm] r214963 - Add a new option -run-slp-after-loop-vectorization.

Gerolf Hoflehner ghoflehner at apple.com
Thu Aug 7 14:29:24 PDT 2014


CINT2006 looks fine on ARM64. Performance changes are within the noise with a small uptick favoring the change.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: PastedGraphic-3.pdf
Type: application/pdf
Size: 319716 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140807/e179cc28/attachment.pdf>
-------------- next part --------------


On Aug 6, 2014, at 2:00 PM, Gerolf Hoflehner <ghoflehner at apple.com> wrote:

> That looks interesting. I’ll kick off an initial set of test runs on x86-64 and ARM64 for CINT2006 O3 LTO on the ref input sets. It would be great if we could test more HPC workloads, though. Does anyone have ideas/benchmark setup to try? On CINT2006 I only expect libquantum and hmmer to be sensitive to the change.
> 
> Cheers
> Gerolf
> 
> On Aug 6, 2014, at 5:56 AM, James Molloy <james.molloy at arm.com> wrote:
> 
>> Author: jamesm
>> Date: Wed Aug  6 07:56:19 2014
>> New Revision: 214963
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=214963&view=rev
>> Log:
>> Add a new option -run-slp-after-loop-vectorization.
>> 
>> This swaps the order of the loop vectorizer and the SLP/BB vectorizers. It is disabled by default so we can do performance testing - ideally we want to change to having the loop vectorizer running first, and the SLP vectorizer using its leftovers instead of the other way around.
>> 
>> 
>> Modified:
>>   llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp
>> 
>> Modified: llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp?rev=214963&r1=214962&r2=214963&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp (original)
>> +++ llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp Wed Aug  6 07:56:19 2014
>> @@ -57,6 +57,13 @@ static cl::opt<bool> RunLoadCombine("com
>>                                    cl::Hidden,
>>                                    cl::desc("Run the load combining pass"));
>> 
>> +static cl::opt<bool>
>> +RunSLPAfterLoopVectorization("run-slp-after-loop-vectorization",
>> +  cl::init(false), cl::Hidden,
>> +  cl::desc("Run the SLP vectorizer (and BB vectorizer) after the Loop "
>> +           "vectorizer instead of before"));
>> +
>> +
>> PassManagerBuilder::PassManagerBuilder() {
>>    OptLevel = 2;
>>    SizeLevel = 0;
>> @@ -227,21 +234,23 @@ void PassManagerBuilder::populateModuleP
>> 
>>  if (RerollLoops)
>>    MPM.add(createLoopRerollPass());
>> -  if (SLPVectorize)
>> -    MPM.add(createSLPVectorizerPass());   // Vectorize parallel scalar chains.
>> -
>> -  if (BBVectorize) {
>> -    MPM.add(createBBVectorizePass());
>> -    MPM.add(createInstructionCombiningPass());
>> -    addExtensionsToPM(EP_Peephole, MPM);
>> -    if (OptLevel > 1 && UseGVNAfterVectorization)
>> -      MPM.add(createGVNPass());           // Remove redundancies
>> -    else
>> -      MPM.add(createEarlyCSEPass());      // Catch trivial redundancies
>> -
>> -    // BBVectorize may have significantly shortened a loop body; unroll again.
>> -    if (!DisableUnrollLoops)
>> -      MPM.add(createLoopUnrollPass());
>> +  if (!RunSLPAfterLoopVectorization) {
>> +    if (SLPVectorize)
>> +      MPM.add(createSLPVectorizerPass());   // Vectorize parallel scalar chains.
>> +
>> +    if (BBVectorize) {
>> +      MPM.add(createBBVectorizePass());
>> +      MPM.add(createInstructionCombiningPass());
>> +      addExtensionsToPM(EP_Peephole, MPM);
>> +      if (OptLevel > 1 && UseGVNAfterVectorization)
>> +        MPM.add(createGVNPass());           // Remove redundancies
>> +      else
>> +        MPM.add(createEarlyCSEPass());      // Catch trivial redundancies
>> +
>> +      // BBVectorize may have significantly shortened a loop body; unroll again.
>> +      if (!DisableUnrollLoops)
>> +        MPM.add(createLoopUnrollPass());
>> +    }
>>  }
>> 
>>  if (LoadCombine)
>> @@ -263,6 +272,26 @@ void PassManagerBuilder::populateModuleP
>>  // as function calls, so that we can only pass them when the vectorizer
>>  // changed the code.
>>  MPM.add(createInstructionCombiningPass());
>> +
>> +  if (RunSLPAfterLoopVectorization) {
>> +    if (SLPVectorize)
>> +      MPM.add(createSLPVectorizerPass());   // Vectorize parallel scalar chains.
>> +
>> +    if (BBVectorize) {
>> +      MPM.add(createBBVectorizePass());
>> +      MPM.add(createInstructionCombiningPass());
>> +      addExtensionsToPM(EP_Peephole, MPM);
>> +      if (OptLevel > 1 && UseGVNAfterVectorization)
>> +        MPM.add(createGVNPass());           // Remove redundancies
>> +      else
>> +        MPM.add(createEarlyCSEPass());      // Catch trivial redundancies
>> +
>> +      // BBVectorize may have significantly shortened a loop body; unroll again.
>> +      if (!DisableUnrollLoops)
>> +        MPM.add(createLoopUnrollPass());
>> +    }
>> +  }
>> +
>>  addExtensionsToPM(EP_Peephole, MPM);
>>  MPM.add(createCFGSimplificationPass());
>> 
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 



More information about the llvm-commits mailing list