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

Gerolf Hoflehner ghoflehner at apple.com
Sun Aug 10 20:33:00 PDT 2014


Dito for x86-64.

-Gerolf


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

> CINT2006 looks fine on ARM64. Performance changes are within the noise with a small uptick favoring the change.
> 
> <PastedGraphic-3.pdf>
> 
> 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