diff options
Diffstat (limited to 'lib/Bitcode/Writer/BitcodeWriterPass.cpp')
| -rw-r--r-- | lib/Bitcode/Writer/BitcodeWriterPass.cpp | 44 | 
1 files changed, 35 insertions, 9 deletions
diff --git a/lib/Bitcode/Writer/BitcodeWriterPass.cpp b/lib/Bitcode/Writer/BitcodeWriterPass.cpp index 24de99a34d33c..3e89ade424a2b 100644 --- a/lib/Bitcode/Writer/BitcodeWriterPass.cpp +++ b/lib/Bitcode/Writer/BitcodeWriterPass.cpp @@ -12,14 +12,19 @@  //===----------------------------------------------------------------------===//  #include "llvm/Bitcode/BitcodeWriterPass.h" +#include "llvm/Analysis/ModuleSummaryAnalysis.h"  #include "llvm/Bitcode/ReaderWriter.h"  #include "llvm/IR/Module.h"  #include "llvm/IR/PassManager.h"  #include "llvm/Pass.h"  using namespace llvm; -PreservedAnalyses BitcodeWriterPass::run(Module &M) { -  WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, EmitFunctionSummary); +PreservedAnalyses BitcodeWriterPass::run(Module &M, ModuleAnalysisManager &) { +  std::unique_ptr<ModuleSummaryIndex> Index; +  if (EmitSummaryIndex) +    Index = ModuleSummaryIndexBuilder(&M).takeIndex(); +  WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, Index.get(), +                     EmitModuleHash);    return PreservedAnalyses::all();  } @@ -27,31 +32,52 @@ namespace {    class WriteBitcodePass : public ModulePass {      raw_ostream &OS; // raw_ostream to print on      bool ShouldPreserveUseListOrder; -    bool EmitFunctionSummary; +    bool EmitSummaryIndex; +    bool EmitModuleHash;    public:      static char ID; // Pass identification, replacement for typeid +    WriteBitcodePass() : ModulePass(ID), OS(dbgs()) { +      initializeWriteBitcodePassPass(*PassRegistry::getPassRegistry()); +    } +      explicit WriteBitcodePass(raw_ostream &o, bool ShouldPreserveUseListOrder, -                              bool EmitFunctionSummary) +                              bool EmitSummaryIndex, bool EmitModuleHash)          : ModulePass(ID), OS(o),            ShouldPreserveUseListOrder(ShouldPreserveUseListOrder), -          EmitFunctionSummary(EmitFunctionSummary) {} +          EmitSummaryIndex(EmitSummaryIndex), EmitModuleHash(EmitModuleHash) { +      initializeWriteBitcodePassPass(*PassRegistry::getPassRegistry()); +    }      const char *getPassName() const override { return "Bitcode Writer"; }      bool runOnModule(Module &M) override { -      WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, -                         EmitFunctionSummary); +      const ModuleSummaryIndex *Index = +          EmitSummaryIndex +              ? &(getAnalysis<ModuleSummaryIndexWrapperPass>().getIndex()) +              : nullptr; +      WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, Index, +                         EmitModuleHash);        return false;      } +    void getAnalysisUsage(AnalysisUsage &AU) const override { +      AU.setPreservesAll(); +      if (EmitSummaryIndex) +        AU.addRequired<ModuleSummaryIndexWrapperPass>(); +    }    };  }  char WriteBitcodePass::ID = 0; +INITIALIZE_PASS_BEGIN(WriteBitcodePass, "write-bitcode", "Write Bitcode", false, +                      true) +INITIALIZE_PASS_DEPENDENCY(ModuleSummaryIndexWrapperPass) +INITIALIZE_PASS_END(WriteBitcodePass, "write-bitcode", "Write Bitcode", false, +                    true)  ModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str,                                            bool ShouldPreserveUseListOrder, -                                          bool EmitFunctionSummary) { +                                          bool EmitSummaryIndex, bool EmitModuleHash) {    return new WriteBitcodePass(Str, ShouldPreserveUseListOrder, -                              EmitFunctionSummary); +                              EmitSummaryIndex, EmitModuleHash);  }  | 
