1 //===-- BitcodeWriterPass.h - Bitcode writing pass --------------*- C++ -*-===//
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-exception
7 //===----------------------------------------------------------------------===//
10 /// This file provides a bitcode writing pass.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_BITCODE_BITCODEWRITERPASS_H
15 #define LLVM_BITCODE_BITCODEWRITERPASS_H
17 #include "llvm/ADT/StringRef.h"
18 #include "llvm/IR/PassManager.h"
26 /// Create and return a pass that writes the module to the specified
27 /// ostream. Note that this pass is designed for use with the legacy pass
30 /// If \c ShouldPreserveUseListOrder, encode use-list order so it can be
31 /// reproduced when deserialized.
33 /// If \c EmitSummaryIndex, emit the summary index (currently for use in ThinLTO
36 /// If \c EmitModuleHash, compute and emit the module hash in the bitcode
37 /// (currently for use in ThinLTO incremental build).
38 ModulePass
*createBitcodeWriterPass(raw_ostream
&Str
,
39 bool ShouldPreserveUseListOrder
= false,
40 bool EmitSummaryIndex
= false,
41 bool EmitModuleHash
= false);
43 /// Check whether a pass is a BitcodeWriterPass.
44 bool isBitcodeWriterPass(Pass
*P
);
46 /// Pass for writing a module of IR out to a bitcode file.
48 /// Note that this is intended for use with the new pass manager. To construct
49 /// a pass for the legacy pass manager, use the function above.
50 class BitcodeWriterPass
: public PassInfoMixin
<BitcodeWriterPass
> {
52 bool ShouldPreserveUseListOrder
;
53 bool EmitSummaryIndex
;
57 /// Construct a bitcode writer pass around a particular output stream.
59 /// If \c ShouldPreserveUseListOrder, encode use-list order so it can be
60 /// reproduced when deserialized.
62 /// If \c EmitSummaryIndex, emit the summary index (currently
63 /// for use in ThinLTO optimization).
64 explicit BitcodeWriterPass(raw_ostream
&OS
,
65 bool ShouldPreserveUseListOrder
= false,
66 bool EmitSummaryIndex
= false,
67 bool EmitModuleHash
= false)
68 : OS(OS
), ShouldPreserveUseListOrder(ShouldPreserveUseListOrder
),
69 EmitSummaryIndex(EmitSummaryIndex
), EmitModuleHash(EmitModuleHash
) {}
71 /// Run the bitcode writer pass, and output the module to the selected
73 PreservedAnalyses
run(Module
&M
, ModuleAnalysisManager
&);