Index: llvm/trunk/include/llvm/Transforms/IPO/PassManagerBuilder.h =================================================================== --- llvm/trunk/include/llvm/Transforms/IPO/PassManagerBuilder.h +++ llvm/trunk/include/llvm/Transforms/IPO/PassManagerBuilder.h @@ -138,6 +138,8 @@ bool PrepareForThinLTO; bool PerformThinLTO; + /// Enable profile instrumentation pass. + bool EnablePGOInstrGen; /// Profile data file name that the instrumentation will be written to. std::string PGOInstrGen; /// Path of the profile data file. Index: llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp =================================================================== --- llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp +++ llvm/trunk/lib/Transforms/IPO/PassManagerBuilder.cpp @@ -111,10 +111,13 @@ "enable-loop-load-elim", cl::init(true), cl::Hidden, cl::desc("Enable the LoopLoadElimination Pass")); -static cl::opt RunPGOInstrGen( - "profile-generate", cl::init(""), cl::Hidden, - cl::desc("Enable generation phase of PGO instrumentation and specify the " - "path of profile data file")); +static cl::opt RunPGOInstrGen( + "profile-generate", cl::init(false), cl::Hidden, + cl::desc("Enable PGO instrumentation.")); + +static cl::opt + PGOOutputFile("profile-generate-file", cl::init(""), cl::Hidden, + cl::desc("Specify the path of profile data file.")); static cl::opt RunPGOInstrUse( "profile-use", cl::init(""), cl::Hidden, cl::value_desc("filename"), @@ -156,7 +159,8 @@ VerifyOutput = false; MergeFunctions = false; PrepareForLTO = false; - PGOInstrGen = RunPGOInstrGen; + EnablePGOInstrGen = RunPGOInstrGen; + PGOInstrGen = PGOOutputFile; PGOInstrUse = RunPGOInstrUse; PrepareForThinLTO = false; PerformThinLTO = false; @@ -243,7 +247,7 @@ // Do PGO instrumentation generation or use pass as the option specified. void PassManagerBuilder::addPGOInstrPasses(legacy::PassManagerBase &MPM) { - if (PGOInstrGen.empty() && PGOInstrUse.empty()) + if (!EnablePGOInstrGen && PGOInstrUse.empty()) return; // Perform the preinline and cleanup passes for O1 and above. // And avoid doing them if optimizing for size. @@ -256,11 +260,12 @@ MPM.add(createInstructionCombiningPass()); // Combine silly seq's addExtensionsToPM(EP_Peephole, MPM); } - if (!PGOInstrGen.empty()) { + if (EnablePGOInstrGen) { MPM.add(createPGOInstrumentationGenLegacyPass()); // Add the profile lowering pass. InstrProfOptions Options; - Options.InstrProfileOutput = PGOInstrGen; + if (!PGOInstrGen.empty()) + Options.InstrProfileOutput = PGOInstrGen; MPM.add(createInstrProfilingLegacyPass(Options)); } if (!PGOInstrUse.empty()) Index: llvm/trunk/test/Transforms/PGOProfile/preinline.ll =================================================================== --- llvm/trunk/test/Transforms/PGOProfile/preinline.ll +++ llvm/trunk/test/Transforms/PGOProfile/preinline.ll @@ -1,4 +1,5 @@ -; RUN: opt < %s -O2 -profile-generate=default.profraw -S | FileCheck %s --check-prefix=GEN +; RUN: opt < %s -O2 -profile-generate -S | FileCheck %s --check-prefix=GEN +; RUN: opt < %s -O2 -profile-generate -profile-generate-file=default.profraw -S | FileCheck %s --check-prefix=GEN target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu"