[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
This commit is contained in:
Teresa Johnson 2016-09-17 20:40:16 +00:00
parent 1982c8eed7
commit b6d6773710
2 changed files with 10 additions and 1 deletions

View File

@ -112,6 +112,10 @@ static cl::opt<bool> EnableLoopLoadElim(
"enable-loop-load-elim", cl::init(true), cl::Hidden,
cl::desc("Enable the LoopLoadElimination Pass"));
static cl::opt<bool>
EnablePrepareForThinLTO("prepare-for-thinlto", cl::init(false), cl::Hidden,
cl::desc("Enable preparation for ThinLTO."));
static cl::opt<bool> 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;
}

View File

@ -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