blob: ddb121a109a13c1a5e366f37f98084b242f88d10 [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"
Duncan P. N. Exon Smitha052ed62015-04-15 00:10:50 +000018#include "llvm/IR/UseListOrder.h"
Chris Lattner7ef41712007-05-06 02:30:12 +000019#include "llvm/Pass.h"
20using namespace llvm;
21
Chandler Carruthd174ce42015-01-05 02:47:05 +000022PreservedAnalyses BitcodeWriterPass::run(Module &M) {
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000023 WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder);
Chandler Carruthb7bdfd62014-01-13 07:38:24 +000024 return PreservedAnalyses::all();
25}
26
Chris Lattner7ef41712007-05-06 02:30:12 +000027namespace {
28 class WriteBitcodePass : public ModulePass {
Chris Lattner69733952009-08-23 07:49:08 +000029 raw_ostream &OS; // raw_ostream to print on
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000030 bool ShouldPreserveUseListOrder;
31
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
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000034 explicit WriteBitcodePass(raw_ostream &o, bool ShouldPreserveUseListOrder)
35 : ModulePass(ID), OS(o),
36 ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {}
Joe Abbey2ad8df22012-11-25 15:23:39 +000037
Craig Topper85482992014-03-05 07:52:44 +000038 const char *getPassName() const override { return "Bitcode Writer"; }
Joe Abbey2ad8df22012-11-25 15:23:39 +000039
Craig Topper85482992014-03-05 07:52:44 +000040 bool runOnModule(Module &M) override {
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000041 WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder);
Chris Lattner7ef41712007-05-06 02:30:12 +000042 return false;
43 }
44 };
45}
46
47char WriteBitcodePass::ID = 0;
Chris Lattner7ef41712007-05-06 02:30:12 +000048
Duncan P. N. Exon Smith679db332015-04-15 00:34:24 +000049ModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str,
50 bool ShouldPreserveUseListOrder) {
51 return new WriteBitcodePass(Str, ShouldPreserveUseListOrder);
Daniel Dunbar890d0de2008-10-22 17:39:14 +000052}