From b6d6773710e3e9664a2fb809e3af80c2ce67a6db Mon Sep 17 00:00:00 2001 From: Teresa Johnson Date: Sat, 17 Sep 2016 20:40:16 +0000 Subject: [PATCH] [ThinLTO] Ensure anonymous globals renamed even at -O0 Summary: This fixes an issue when files are compiled with -flto=thin at default -O0. We need to rename anonymous globals before attempting to write the module summary because all values need names for the summary. This was happening at -O1 and above, but not before the early exit when constructing the pipeline for -O0. Also add an internal -prepare-for-thinlto option to enable this to be tested via opt. Fixes PR30419. Reviewers: mehdi_amini Subscribers: probinson, llvm-commits, mehdi_amini Differential Revision: https://reviews.llvm.org/D24701 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281840 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/IPO/PassManagerBuilder.cpp | 10 +++++++++- test/Transforms/NameAnonGlobals/rename.ll | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/Transforms/IPO/PassManagerBuilder.cpp b/lib/Transforms/IPO/PassManagerBuilder.cpp index 9bd9180eff7..cf8348f2dec 100644 --- a/lib/Transforms/IPO/PassManagerBuilder.cpp +++ b/lib/Transforms/IPO/PassManagerBuilder.cpp @@ -112,6 +112,10 @@ static cl::opt EnableLoopLoadElim( "enable-loop-load-elim", cl::init(true), cl::Hidden, cl::desc("Enable the LoopLoadElimination Pass")); +static cl::opt + EnablePrepareForThinLTO("prepare-for-thinlto", cl::init(false), cl::Hidden, + cl::desc("Enable preparation for ThinLTO.")); + static cl::opt RunPGOInstrGen( "profile-generate", cl::init(false), cl::Hidden, cl::desc("Enable PGO instrumentation.")); @@ -163,7 +167,7 @@ PassManagerBuilder::PassManagerBuilder() { EnablePGOInstrGen = RunPGOInstrGen; PGOInstrGen = PGOOutputFile; PGOInstrUse = RunPGOInstrUse; - PrepareForThinLTO = false; + PrepareForThinLTO = EnablePrepareForThinLTO; PerformThinLTO = false; } @@ -395,6 +399,10 @@ void PassManagerBuilder::populateModulePassManager( else if (!GlobalExtensions->empty() || !Extensions.empty()) MPM.add(createBarrierNoopPass()); + if (PrepareForThinLTO) + // Rename anon globals to be able to export them in the summary. + MPM.add(createNameAnonGlobalPass()); + addExtensionsToPM(EP_EnabledOnOptLevel0, MPM); return; } diff --git a/test/Transforms/NameAnonGlobals/rename.ll b/test/Transforms/NameAnonGlobals/rename.ll index 996dc51800f..74fb972e756 100644 --- a/test/Transforms/NameAnonGlobals/rename.ll +++ b/test/Transforms/NameAnonGlobals/rename.ll @@ -1,4 +1,5 @@ ; RUN: opt -S -name-anon-globals < %s | FileCheck %s +; RUN: opt -prepare-for-thinlto -O0 -module-summary -o %t.bc < %s ; foo contribute to the unique hash for the module -- 2.50.1