Index: include/llvm/Transforms/Scalar.h =================================================================== --- include/llvm/Transforms/Scalar.h +++ include/llvm/Transforms/Scalar.h @@ -418,7 +418,7 @@ //===----------------------------------------------------------------------===// // // AddDiscriminators - Add DWARF path discriminators to the IR. -FunctionPass *createAddDiscriminatorsPass(); +FunctionPass *createAddDiscriminatorsPass(bool IsSamplePGO = false); //===----------------------------------------------------------------------===// // Index: include/llvm/Transforms/Utils/AddDiscriminators.h =================================================================== --- include/llvm/Transforms/Utils/AddDiscriminators.h +++ include/llvm/Transforms/Utils/AddDiscriminators.h @@ -21,7 +21,11 @@ namespace llvm { class AddDiscriminatorsPass : public PassInfoMixin { + bool IsSamplePGO; + public: + AddDiscriminatorsPass(bool IsSamplePGO = false) : IsSamplePGO(IsSamplePGO) {} + PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); }; } // end namespace llvm Index: lib/Transforms/Utils/AddDiscriminators.cpp =================================================================== --- lib/Transforms/Utils/AddDiscriminators.cpp +++ lib/Transforms/Utils/AddDiscriminators.cpp @@ -77,11 +77,16 @@ // The legacy pass of AddDiscriminators. struct AddDiscriminatorsLegacyPass : public FunctionPass { static char ID; // Pass identification, replacement for typeid - AddDiscriminatorsLegacyPass() : FunctionPass(ID) { + + AddDiscriminatorsLegacyPass(bool IsSamplePGO = false) : + FunctionPass(ID), IsSamplePGO(IsSamplePGO) { initializeAddDiscriminatorsLegacyPassPass(*PassRegistry::getPassRegistry()); } bool runOnFunction(Function &F) override; + + private: + bool IsSamplePGO; }; } // end anonymous namespace @@ -100,8 +105,8 @@ cl::desc("Disable generation of discriminator information.")); // Create the legacy AddDiscriminatorsPass. -FunctionPass *llvm::createAddDiscriminatorsPass() { - return new AddDiscriminatorsLegacyPass(); +FunctionPass *llvm::createAddDiscriminatorsPass(bool IsSamplePGO) { + return new AddDiscriminatorsLegacyPass(IsSamplePGO); } /// \brief Assign DWARF discriminators. @@ -155,14 +160,13 @@ /// lexical block for I2 and all the instruction in B2 that share the same /// file and line location as I2. This new lexical block will have a /// different discriminator number than I1. -static bool addDiscriminators(Function &F) { +static bool addDiscriminators(Function &F, bool IsSamplePGO) { // If the function has debug information, but the user has disabled // discriminators, do nothing. // Simlarly, if the function has no debug info, do nothing. - // Finally, if this module is built with dwarf versions earlier than 4, // do nothing (discriminator support is a DWARF 4 feature). if (NoDiscriminators || !F.getSubprogram() || - F.getParent()->getDwarfVersion() < 4) + (!IsSamplePGO && F.getParent()->getDwarfVersion() < 4)) return false; bool Changed = false; @@ -246,11 +250,11 @@ } bool AddDiscriminatorsLegacyPass::runOnFunction(Function &F) { - return addDiscriminators(F); + return addDiscriminators(F, IsSamplePGO); } PreservedAnalyses AddDiscriminatorsPass::run(Function &F, FunctionAnalysisManager &AM) { - if (!addDiscriminators(F)) + if (!addDiscriminators(F, IsSamplePGO)) return PreservedAnalyses::all(); // FIXME: should be all()