diff --git a/src/pipeline.cpp b/src/pipeline.cpp index aaadc6674702d..90503f054fa66 100644 --- a/src/pipeline.cpp +++ b/src/pipeline.cpp @@ -37,6 +37,7 @@ #include #include #include +#include "llvm/Transforms/Scalar/AlignmentFromAssumptions.h" #include #include #include "llvm/Transforms/Scalar/ConstraintElimination.h" @@ -49,6 +50,7 @@ #include #include #include +#include "llvm/Transforms/Scalar/InferAlignment.h" #include #include #include @@ -59,6 +61,7 @@ #include #include #include +#include #include #include #include @@ -527,19 +530,22 @@ static void buildVectorPipeline(FunctionPassManager &FPM, PassBuilder *PB, Optim FPM.addPass(createFunctionToLoopPassAdaptor(std::move(LPM), /*UseMemorySSA=*/false, /*UseBlockFrequencyInfo=*/false)); FPM.addPass(LoopDistributePass()); FPM.addPass(InjectTLIMappings()); + FPM.addPass(InferAlignmentPass()); FPM.addPass(LoopVectorizePass()); FPM.addPass(LoopLoadEliminationPass()); FPM.addPass(SimplifyCFGPass(aggressiveSimplifyCFGOptions())); + FPM.addPass(createFunctionToLoopPassAdaptor(LoopUnrollAndJamPass(O.getSpeedupLevel()))); FPM.addPass(createFunctionToLoopPassAdaptor(LICMPass(LICMOptions()), /*UseMemorySSA=*/true, /*UseBlockFrequencyInfo=*/false)); FPM.addPass(EarlyCSEPass()); FPM.addPass(CorrelatedValuePropagationPass()); FPM.addPass(InstCombinePass()); FPM.addPass(SLPVectorizerPass()); FPM.addPass(VectorCombinePass()); + FPM.addPass(InferAlignmentPass()); invokeVectorizerCallbacks(FPM, PB, O); - FPM.addPass(LoopUnrollPass(LoopUnrollOptions(O.getSpeedupLevel(), /*OnlyWhenForced = */ false, /*ForgetSCEV = */false))); FPM.addPass(SROAPass(SROAOptions::PreserveCFG)); FPM.addPass(InstSimplifyPass()); + FPM.addPass(AlignmentFromAssumptionsPass()); FPM.addPass(AfterVectorizationMarkerPass()); } FPM.addPass(AfterVectorizationMarkerPass());