@@ -1298,10 +1298,18 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
12981298
12991299// / TODO: Should LTO cause any differences to this set of passes?
13001300void PassBuilder::addVectorPasses (OptimizationLevel Level,
1301- FunctionPassManager &FPM, bool IsFullLTO) {
1301+ FunctionPassManager &FPM,
1302+ ThinOrFullLTOPhase LTOPhase) {
1303+ const bool IsFullLTO = LTOPhase == ThinOrFullLTOPhase::FullLTOPostLink;
1304+
13021305 FPM.addPass (LoopVectorizePass (
13031306 LoopVectorizeOptions (!PTO.LoopInterleaving , !PTO.LoopVectorization )));
13041307
1308+ // Drop dereferenceable assumes after vectorization, as they are no longer
1309+ // needed and can inhibit further optimization.
1310+ if (!isLTOPreLink (LTOPhase))
1311+ FPM.addPass (DropUnnecessaryAssumesPass (/* DropDereferenceable=*/ true ));
1312+
13051313 FPM.addPass (InferAlignmentPass ());
13061314 if (IsFullLTO) {
13071315 // The vectorizer may have significantly shortened a loop body; unroll
@@ -1572,7 +1580,7 @@ PassBuilder::buildModuleOptimizationPipeline(OptimizationLevel Level,
15721580 // from the TargetLibraryInfo.
15731581 OptimizePM.addPass (InjectTLIMappings ());
15741582
1575- addVectorPasses (Level, OptimizePM, /* IsFullLTO */ false );
1583+ addVectorPasses (Level, OptimizePM, LTOPhase );
15761584
15771585 invokeVectorizerEndEPCallbacks (OptimizePM, Level);
15781586
@@ -2162,7 +2170,7 @@ PassBuilder::buildLTODefaultPipeline(OptimizationLevel Level,
21622170
21632171 MainFPM.addPass (LoopDistributePass ());
21642172
2165- addVectorPasses (Level, MainFPM, /* IsFullLTO */ true );
2173+ addVectorPasses (Level, MainFPM, ThinOrFullLTOPhase::FullLTOPostLink );
21662174
21672175 invokeVectorizerEndEPCallbacks (MainFPM, Level);
21682176
0 commit comments