blob: 85b9bd83c13120c9b103bda78261f1872138ce4e [file] [log] [blame]
Chandler Carruthb7bdfd62014-01-13 07:38:24 +00001//===- BitcodeWriterPass.cpp - Bitcode writing pass -----------------------===//
Chris Lattner7ef41712007-05-06 02:30:12 +00002//
3// The LLVM Compiler Infrastructure
4//
Chris Lattnerf3ebc3f2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Chris Lattner7ef41712007-05-06 02:30:12 +00007//
8//===----------------------------------------------------------------------===//
9//
10// BitcodeWriterPass implementation.
11//
12//===----------------------------------------------------------------------===//
13
Chandler Carruthb7bdfd62014-01-13 07:38:24 +000014#include "llvm/Bitcode/BitcodeWriterPass.h"
Chris Lattner7ef41712007-05-06 02:30:12 +000015#include "llvm/Bitcode/ReaderWriter.h"
Chandler Carruthb7bdfd62014-01-13 07:38:24 +000016#include "llvm/IR/Module.h"
17#include "llvm/IR/PassManager.h"
Chris Lattner7ef41712007-05-06 02:30:12 +000018#include "llvm/Pass.h"
19using namespace llvm;
20
Chandler Carruthd174ce42015-01-05 02:47:05 +000021PreservedAnalyses BitcodeWriterPass::run(Module &M) {
Teresa Johnson26ab5772016-03-15 00:04:37 +000022 WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, EmitSummaryIndex);
Chandler Carruthb7bdfd62014-01-13 07:38:24 +000023 return PreservedAnalyses::all();
24}
25
Chris Lattner7ef41712007-05-06 02:30:12 +000026namespace {
27 class WriteBitcodePass : public ModulePass {
Chris Lattner69733952009-08-23 07:49:08 +000028 raw_ostream &OS; // raw_ostream to print on
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000029 bool ShouldPreserveUseListOrder;
Teresa Johnson26ab5772016-03-15 00:04:37 +000030 bool EmitSummaryIndex;
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000031
Chris Lattner7ef41712007-05-06 02:30:12 +000032 public:
Daniel Dunbar890d0de2008-10-22 17:39:14 +000033 static char ID; // Pass identification, replacement for typeid
Teresa Johnson403a7872015-10-04 14:33:43 +000034 explicit WriteBitcodePass(raw_ostream &o, bool ShouldPreserveUseListOrder,
Teresa Johnson26ab5772016-03-15 00:04:37 +000035 bool EmitSummaryIndex)
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000036 : ModulePass(ID), OS(o),
Teresa Johnson403a7872015-10-04 14:33:43 +000037 ShouldPreserveUseListOrder(ShouldPreserveUseListOrder),
Teresa Johnson26ab5772016-03-15 00:04:37 +000038 EmitSummaryIndex(EmitSummaryIndex) {}
Joe Abbey2ad8df22012-11-25 15:23:39 +000039
Craig Topper85482992014-03-05 07:52:44 +000040 const char *getPassName() const override { return "Bitcode Writer"; }
Joe Abbey2ad8df22012-11-25 15:23:39 +000041
Craig Topper85482992014-03-05 07:52:44 +000042 bool runOnModule(Module &M) override {
Teresa Johnson26ab5772016-03-15 00:04:37 +000043 WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, EmitSummaryIndex);
Chris Lattner7ef41712007-05-06 02:30:12 +000044 return false;
45 }
46 };
Alexander Kornienkof00654e2015-06-23 09:49:53 +000047}
Chris Lattner7ef41712007-05-06 02:30:12 +000048
49char WriteBitcodePass::ID = 0;
Chris Lattner7ef41712007-05-06 02:30:12 +000050
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000051ModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str,
Teresa Johnson403a7872015-10-04 14:33:43 +000052 bool ShouldPreserveUseListOrder,
Teresa Johnson26ab5772016-03-15 00:04:37 +000053 bool EmitSummaryIndex) {
Teresa Johnson403a7872015-10-04 14:33:43 +000054 return new WriteBitcodePass(Str, ShouldPreserveUseListOrder,
Teresa Johnson26ab5772016-03-15 00:04:37 +000055 EmitSummaryIndex);
Daniel Dunbar890d0de2008-10-22 17:39:14 +000056}