[llvm] [cmake] Add possibility to use ChooseMSVCCRT.cmake when include LLVM library
[llvm-core.git] / tools / opt / NewPMDriver.h
blobb672c97c9aa35b0278a64959bcaf86bc2aa3848a
1 //===- NewPMDriver.h - Function to drive opt with the new PM ----*- C++ -*-===//
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 /// \file
9 ///
10 /// A single function which is called to drive the opt behavior for the new
11 /// PassManager.
12 ///
13 /// This is only in a separate TU with a header to avoid including all of the
14 /// old pass manager headers and the new pass manager headers into the same
15 /// file. Eventually all of the routines here will get folded back into
16 /// opt.cpp.
17 ///
18 //===----------------------------------------------------------------------===//
20 #ifndef LLVM_TOOLS_OPT_NEWPMDRIVER_H
21 #define LLVM_TOOLS_OPT_NEWPMDRIVER_H
23 namespace llvm {
24 class StringRef;
25 class LLVMContext;
26 class Module;
27 class TargetMachine;
28 class ToolOutputFile;
30 namespace opt_tool {
31 enum OutputKind {
32 OK_NoOutput,
33 OK_OutputAssembly,
34 OK_OutputBitcode,
35 OK_OutputThinLTOBitcode,
37 enum VerifierKind {
38 VK_NoVerifier,
39 VK_VerifyInAndOut,
40 VK_VerifyEachPass
42 enum PGOKind {
43 NoPGO,
44 InstrGen,
45 InstrUse,
46 SampleUse
48 enum CSPGOKind { NoCSPGO, CSInstrGen, CSInstrUse };
51 /// Driver function to run the new pass manager over a module.
52 ///
53 /// This function only exists factored away from opt.cpp in order to prevent
54 /// inclusion of the new pass manager headers and the old headers into the same
55 /// file. It's interface is consequentially somewhat ad-hoc, but will go away
56 /// when the transition finishes.
57 ///
58 /// ThinLTOLinkOut is only used when OK is OK_OutputThinLTOBitcode, and can be
59 /// nullptr.
60 bool runPassPipeline(StringRef Arg0, Module &M, TargetMachine *TM,
61 ToolOutputFile *Out, ToolOutputFile *ThinLinkOut,
62 ToolOutputFile *OptRemarkFile, StringRef PassPipeline,
63 opt_tool::OutputKind OK, opt_tool::VerifierKind VK,
64 bool ShouldPreserveAssemblyUseListOrder,
65 bool ShouldPreserveBitcodeUseListOrder,
66 bool EmitSummaryIndex, bool EmitModuleHash,
67 bool EnableDebugify);
68 } // namespace llvm
70 #endif