Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/tools/opt/NewPMDriver.h
35231 views
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
//===----------------------------------------------------------------------===//
19
20
#ifndef LLVM_TOOLS_OPT_NEWPMDRIVER_H
21
#define LLVM_TOOLS_OPT_NEWPMDRIVER_H
22
23
#include "llvm/Support/CommandLine.h"
24
25
namespace llvm {
26
class PassBuilder;
27
class StringRef;
28
class Module;
29
class PassPlugin;
30
class TargetMachine;
31
class ToolOutputFile;
32
class TargetLibraryInfoImpl;
33
34
extern cl::opt<bool> DebugifyEach;
35
extern cl::opt<std::string> DebugifyExport;
36
37
extern cl::opt<bool> VerifyEachDebugInfoPreserve;
38
extern cl::opt<std::string> VerifyDIPreserveExport;
39
40
namespace opt_tool {
41
enum OutputKind {
42
OK_NoOutput,
43
OK_OutputAssembly,
44
OK_OutputBitcode,
45
OK_OutputThinLTOBitcode,
46
};
47
enum VerifierKind { VK_NoVerifier, VK_VerifyOut, VK_VerifyEachPass };
48
enum PGOKind {
49
NoPGO,
50
InstrGen,
51
InstrUse,
52
SampleUse
53
};
54
enum CSPGOKind { NoCSPGO, CSInstrGen, CSInstrUse };
55
}
56
57
void printPasses(raw_ostream &OS);
58
59
/// Driver function to run the new pass manager over a module.
60
///
61
/// This function only exists factored away from opt.cpp in order to prevent
62
/// inclusion of the new pass manager headers and the old headers into the same
63
/// file. It's interface is consequentially somewhat ad-hoc, but will go away
64
/// when the transition finishes.
65
///
66
/// ThinLTOLinkOut is only used when OK is OK_OutputThinLTOBitcode, and can be
67
/// nullptr.
68
bool runPassPipeline(
69
StringRef Arg0, Module &M, TargetMachine *TM, TargetLibraryInfoImpl *TLII,
70
ToolOutputFile *Out, ToolOutputFile *ThinLinkOut,
71
ToolOutputFile *OptRemarkFile, StringRef PassPipeline,
72
ArrayRef<PassPlugin> PassPlugins,
73
ArrayRef<std::function<void(llvm::PassBuilder &)>> PassBuilderCallbacks,
74
opt_tool::OutputKind OK, opt_tool::VerifierKind VK,
75
bool ShouldPreserveAssemblyUseListOrder,
76
bool ShouldPreserveBitcodeUseListOrder, bool EmitSummaryIndex,
77
bool EmitModuleHash, bool EnableDebugify, bool VerifyDIPreserve,
78
bool UnifiedLTO = false);
79
} // namespace llvm
80
81
#endif
82
83