mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-04 21:31:03 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214963 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2c0d42ac9a
commit
2d98881b40
@ -57,6 +57,13 @@ static cl::opt<bool> RunLoadCombine("combine-loads", cl::init(false),
|
||||
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::populateModulePassManager(PassManagerBase &MPM) {
|
||||
|
||||
if (RerollLoops)
|
||||
MPM.add(createLoopRerollPass());
|
||||
if (SLPVectorize)
|
||||
MPM.add(createSLPVectorizerPass()); // Vectorize parallel scalar chains.
|
||||
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
|
||||
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());
|
||||
// BBVectorize may have significantly shortened a loop body; unroll again.
|
||||
if (!DisableUnrollLoops)
|
||||
MPM.add(createLoopUnrollPass());
|
||||
}
|
||||
}
|
||||
|
||||
if (LoadCombine)
|
||||
@ -263,6 +272,26 @@ void PassManagerBuilder::populateModulePassManager(PassManagerBase &MPM) {
|
||||
// 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());
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user