@@ -1303,10 +1303,18 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
13031303
13041304// / TODO: Should LTO cause any differences to this set of passes?
13051305void PassBuilder::addVectorPasses (OptimizationLevel Level,
1306- FunctionPassManager &FPM, bool IsFullLTO) {
1306+ FunctionPassManager &FPM,
1307+ ThinOrFullLTOPhase LTOPhase) {
1308+ const bool IsFullLTO = LTOPhase == ThinOrFullLTOPhase::FullLTOPostLink;
1309+
13071310 FPM.addPass (LoopVectorizePass (
13081311 LoopVectorizeOptions (!PTO.LoopInterleaving , !PTO.LoopVectorization )));
13091312
1313+ // Drop dereferenceable assumes after vectorization, as they are no longer
1314+ // needed and can inhibit further optimization.
1315+ if (!isLTOPreLink (LTOPhase))
1316+ FPM.addPass (DropUnnecessaryAssumesPass (/* DropDereferenceable=*/ true ));
1317+
13101318 FPM.addPass (InferAlignmentPass ());
13111319 if (IsFullLTO) {
13121320 // The vectorizer may have significantly shortened a loop body; unroll
@@ -1577,7 +1585,7 @@ PassBuilder::buildModuleOptimizationPipeline(OptimizationLevel Level,
15771585 // from the TargetLibraryInfo.
15781586 OptimizePM.addPass (InjectTLIMappings ());
15791587
1580- addVectorPasses (Level, OptimizePM, /* IsFullLTO */ false );
1588+ addVectorPasses (Level, OptimizePM, LTOPhase );
15811589
15821590 invokeVectorizerEndEPCallbacks (OptimizePM, Level);
15831591
@@ -2179,7 +2187,7 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
21792187
21802188 MainFPM.addPass (LoopDistributePass ());
21812189
2182- addVectorPasses (Level, MainFPM, /* IsFullLTO */ true );
2190+ addVectorPasses (Level, MainFPM, ThinOrFullLTOPhase::FullLTOPostLink );
21832191
21842192 invokeVectorizerEndEPCallbacks (MainFPM, Level);
21852193
0 commit comments