mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-14 00:14:19 +00:00
Vectorizer/PassManager: I am working on moving the vectorizer out of the SCC passes. This patch moves the SLP-vectorizer and BB-vectorizer back into SCC passes for two reasons:
1. They are a kind of cannonicalization. 2. The performance measurements show that it is better to keep them in. There should be no functional change if you are not enabling the LateVectorization mode. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189539 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9fd438fc00
commit
f1cd7983b1
@ -216,22 +216,20 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) {
|
||||
|
||||
addExtensionsToPM(EP_ScalarOptimizerLate, MPM);
|
||||
|
||||
if (!LateVectorize) {
|
||||
if (SLPVectorize)
|
||||
MPM.add(createSLPVectorizerPass()); // Vectorize parallel scalar chains.
|
||||
if (SLPVectorize)
|
||||
MPM.add(createSLPVectorizerPass()); // Vectorize parallel scalar chains.
|
||||
|
||||
if (BBVectorize) {
|
||||
MPM.add(createBBVectorizePass());
|
||||
MPM.add(createInstructionCombiningPass());
|
||||
if (OptLevel > 1 && UseGVNAfterVectorization)
|
||||
MPM.add(createGVNPass()); // Remove redundancies
|
||||
else
|
||||
MPM.add(createEarlyCSEPass()); // Catch trivial redundancies
|
||||
if (BBVectorize) {
|
||||
MPM.add(createBBVectorizePass());
|
||||
MPM.add(createInstructionCombiningPass());
|
||||
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());
|
||||
}
|
||||
// BBVectorize may have significantly shortened a loop body; unroll again.
|
||||
if (!DisableUnrollLoops)
|
||||
MPM.add(createLoopUnrollPass());
|
||||
}
|
||||
|
||||
MPM.add(createAggressiveDCEPass()); // Delete dead instructions
|
||||
@ -241,7 +239,7 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) {
|
||||
// As an experimental mode, run any vectorization passes in a separate
|
||||
// pipeline from the CGSCC pass manager that runs iteratively with the
|
||||
// inliner.
|
||||
if (LateVectorize) {
|
||||
if (LateVectorize && LoopVectorize) {
|
||||
// FIXME: This is a HACK! The inliner pass above implicitly creates a CGSCC
|
||||
// pass manager that we are specifically trying to avoid. To prevent this
|
||||
// we must insert a no-op module pass to reset the pass manager.
|
||||
@ -249,35 +247,9 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) {
|
||||
|
||||
// Add the various vectorization passes and relevant cleanup passes for
|
||||
// them since we are no longer in the middle of the main scalar pipeline.
|
||||
if (LoopVectorize) {
|
||||
MPM.add(createLoopVectorizePass(DisableUnrollLoops));
|
||||
|
||||
if (!DisableUnrollLoops)
|
||||
MPM.add(createLoopUnrollPass()); // Unroll small loops
|
||||
|
||||
// FIXME: Is this necessary/useful? Should we also do SimplifyCFG?
|
||||
MPM.add(createInstructionCombiningPass());
|
||||
}
|
||||
|
||||
if (SLPVectorize) {
|
||||
MPM.add(createSLPVectorizerPass()); // Vectorize parallel scalar chains.
|
||||
|
||||
// FIXME: Is this necessary/useful? Should we also do SimplifyCFG?
|
||||
MPM.add(createInstructionCombiningPass());
|
||||
}
|
||||
|
||||
if (BBVectorize) {
|
||||
MPM.add(createBBVectorizePass());
|
||||
MPM.add(createInstructionCombiningPass());
|
||||
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());
|
||||
}
|
||||
MPM.add(createLoopVectorizePass(DisableUnrollLoops));
|
||||
MPM.add(createInstructionCombiningPass());
|
||||
MPM.add(createCFGSimplificationPass());
|
||||
}
|
||||
|
||||
if (!DisableUnitAtATime) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user