Index: cfe/trunk/lib/CodeGen/BackendUtil.cpp =================================================================== --- cfe/trunk/lib/CodeGen/BackendUtil.cpp +++ cfe/trunk/lib/CodeGen/BackendUtil.cpp @@ -60,6 +60,7 @@ #include "llvm/Transforms/Scalar.h" #include "llvm/Transforms/Scalar/GVN.h" #include "llvm/Transforms/Utils.h" +#include "llvm/Transforms/Utils/CanonicalizeAliases.h" #include "llvm/Transforms/Utils/NameAnonGlobals.h" #include "llvm/Transforms/Utils/SymbolRewriter.h" #include @@ -996,9 +997,11 @@ if (LangOpts.Sanitize.has(SanitizerKind::LocalBounds)) MPM.addPass(createModuleToFunctionPassAdaptor(BoundsCheckingPass())); - // Lastly, add a semantically necessary pass for LTO. - if (IsLTO || IsThinLTO) + // Lastly, add semantically necessary passes for LTO. + if (IsLTO || IsThinLTO) { + MPM.addPass(CanonicalizeAliasesPass()); MPM.addPass(NameAnonGlobalPass()); + } } else { // Map our optimization levels into one of the distinct levels used to // configure the pipeline. @@ -1019,10 +1022,12 @@ if (IsThinLTO) { MPM = PB.buildThinLTOPreLinkDefaultPipeline( Level, CodeGenOpts.DebugPassManager); + MPM.addPass(CanonicalizeAliasesPass()); MPM.addPass(NameAnonGlobalPass()); } else if (IsLTO) { MPM = PB.buildLTOPreLinkDefaultPipeline(Level, CodeGenOpts.DebugPassManager); + MPM.addPass(CanonicalizeAliasesPass()); MPM.addPass(NameAnonGlobalPass()); } else { MPM = PB.buildPerModuleDefaultPipeline(Level, Index: cfe/trunk/test/CodeGen/lto-newpm-pipeline.c =================================================================== --- cfe/trunk/test/CodeGen/lto-newpm-pipeline.c +++ cfe/trunk/test/CodeGen/lto-newpm-pipeline.c @@ -27,12 +27,14 @@ // CHECK-FULL-O0: Starting llvm::Module pass manager run. // CHECK-FULL-O0: Running pass: AlwaysInlinerPass +// CHECK-FULL-O0-NEXT: Running pass: CanonicalizeAliasesPass // CHECK-FULL-O0-NEXT: Running pass: NameAnonGlobalPass // CHECK-FULL-O0-NEXT: Running pass: BitcodeWriterPass // CHECK-FULL-O0: Finished llvm::Module pass manager run. // CHECK-THIN-O0: Starting llvm::Module pass manager run. // CHECK-THIN-O0: Running pass: AlwaysInlinerPass +// CHECK-THIN-O0-NEXT: Running pass: CanonicalizeAliasesPass // CHECK-THIN-O0-NEXT: Running pass: NameAnonGlobalPass // CHECK-THIN-O0-NEXT: Running pass: ThinLTOBitcodeWriterPass // CHECK-THIN-O0: Finished llvm::Module pass manager run. @@ -48,6 +50,7 @@ // LoopVectorizePass. // CHECK-THIN-OPTIMIZED: Starting llvm::Function pass manager run. // CHECK-THIN-OPTIMIZED-NOT: Running pass: LoopVectorizePass +// CHECK-THIN-OPTIMIZED: Running pass: CanonicalizeAliasesPass // CHECK-THIN-OPTIMIZED: Running pass: NameAnonGlobalPass // CHECK-THIN-OPTIMIZED: Running pass: ThinLTOBitcodeWriterPass