80 lines · cpp
1//===- BitcodeWriterPass.cpp - Bitcode writing pass -----------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// BitcodeWriterPass implementation.10//11//===----------------------------------------------------------------------===//12 13#include "llvm/Bitcode/BitcodeWriterPass.h"14#include "llvm/Analysis/ModuleSummaryAnalysis.h"15#include "llvm/Bitcode/BitcodeWriter.h"16#include "llvm/IR/PassManager.h"17#include "llvm/InitializePasses.h"18#include "llvm/Pass.h"19using namespace llvm;20 21PreservedAnalyses BitcodeWriterPass::run(Module &M, ModuleAnalysisManager &AM) {22 M.removeDebugIntrinsicDeclarations();23 24 const ModuleSummaryIndex *Index =25 EmitSummaryIndex ? &(AM.getResult<ModuleSummaryIndexAnalysis>(M))26 : nullptr;27 WriteBitcodeToFile(M, OS, ShouldPreserveUseListOrder, Index, EmitModuleHash);28 29 return PreservedAnalyses::all();30}31 32namespace {33 class WriteBitcodePass : public ModulePass {34 raw_ostream &OS; // raw_ostream to print on35 bool ShouldPreserveUseListOrder;36 37 public:38 static char ID; // Pass identification, replacement for typeid39 WriteBitcodePass() : ModulePass(ID), OS(dbgs()) {40 initializeWriteBitcodePassPass(*PassRegistry::getPassRegistry());41 }42 43 explicit WriteBitcodePass(raw_ostream &o, bool ShouldPreserveUseListOrder)44 : ModulePass(ID), OS(o),45 ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {46 initializeWriteBitcodePassPass(*PassRegistry::getPassRegistry());47 }48 49 StringRef getPassName() const override { return "Bitcode Writer"; }50 51 bool runOnModule(Module &M) override {52 M.removeDebugIntrinsicDeclarations();53 54 WriteBitcodeToFile(M, OS, ShouldPreserveUseListOrder, /*Index=*/nullptr,55 /*EmitModuleHash=*/false);56 57 return false;58 }59 void getAnalysisUsage(AnalysisUsage &AU) const override {60 AU.setPreservesAll();61 }62 };63}64 65char WriteBitcodePass::ID = 0;66INITIALIZE_PASS_BEGIN(WriteBitcodePass, "write-bitcode", "Write Bitcode", false,67 true)68INITIALIZE_PASS_DEPENDENCY(ModuleSummaryIndexWrapperPass)69INITIALIZE_PASS_END(WriteBitcodePass, "write-bitcode", "Write Bitcode", false,70 true)71 72ModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str,73 bool ShouldPreserveUseListOrder) {74 return new WriteBitcodePass(Str, ShouldPreserveUseListOrder);75}76 77bool llvm::isBitcodeWriterPass(Pass *P) {78 return P->getPassID() == (llvm::AnalysisID)&WriteBitcodePass::ID;79}80