blob: 3165743576ec58a50412061ac271a7c555052258 [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) {
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000022 WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder);
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;
30
Chris Lattner7ef41712007-05-06 02:30:12 +000031 public:
Daniel Dunbar890d0de2008-10-22 17:39:14 +000032 static char ID; // Pass identification, replacement for typeid
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000033 explicit WriteBitcodePass(raw_ostream &o, bool ShouldPreserveUseListOrder)
34 : ModulePass(ID), OS(o),
35 ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {}
Joe Abbey2ad8df22012-11-25 15:23:39 +000036
Craig Topper85482992014-03-05 07:52:44 +000037 const char *getPassName() const override { return "Bitcode Writer"; }
Joe Abbey2ad8df22012-11-25 15:23:39 +000038
Craig Topper85482992014-03-05 07:52:44 +000039 bool runOnModule(Module &M) override {
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000040 WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder);
Chris Lattner7ef41712007-05-06 02:30:12 +000041 return false;
42 }
43 };
Alexander Kornienkof00654e2015-06-23 09:49:53 +000044}
Chris Lattner7ef41712007-05-06 02:30:12 +000045
46char WriteBitcodePass::ID = 0;
Chris Lattner7ef41712007-05-06 02:30:12 +000047
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000048ModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str,
49 bool ShouldPreserveUseListOrder) {
50 return new WriteBitcodePass(Str, ShouldPreserveUseListOrder);
Daniel Dunbar890d0de2008-10-22 17:39:14 +000051}