LLVM 19.0.0git
PassBuilderBindings.cpp
Go to the documentation of this file.
1//===-------------- PassBuilder bindings for LLVM-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/// This file defines the C bindings to the new pass manager
11///
12//===----------------------------------------------------------------------===//
13
15#include "llvm/IR/Module.h"
16#include "llvm/IR/Verifier.h"
20
21using namespace llvm;
22
23namespace llvm {
24/// Helper struct for holding a set of builder options for LLVMRunPasses. This
25/// structure is used to keep LLVMRunPasses backwards compatible with future
26/// versions in case we modify the options the new Pass Manager utilizes.
28public:
30 bool DebugLogging = false, bool VerifyEach = false,
33
37};
38} // namespace llvm
39
41 return reinterpret_cast<TargetMachine *>(P);
42}
43
46
54
57 PassBuilder PB(Machine, PassOpts->PTO, std::nullopt, &PIC);
58
68
70 SI.registerCallbacks(PIC, &MAM);
74 }
75 if (auto Err = PB.parsePassPipeline(MPM, Passes)) {
76 return wrap(std::move(Err));
77 }
78
79 MPM.run(*Mod, MAM);
81}
82
84 return wrap(new LLVMPassBuilderOptions());
85}
86
89 unwrap(Options)->VerifyEach = VerifyEach;
90}
91
93 LLVMBool DebugLogging) {
94 unwrap(Options)->DebugLogging = DebugLogging;
95}
96
98 LLVMPassBuilderOptionsRef Options, LLVMBool LoopInterleaving) {
99 unwrap(Options)->PTO.LoopInterleaving = LoopInterleaving;
100}
101
103 LLVMPassBuilderOptionsRef Options, LLVMBool LoopVectorization) {
104 unwrap(Options)->PTO.LoopVectorization = LoopVectorization;
105}
106
108 LLVMPassBuilderOptionsRef Options, LLVMBool SLPVectorization) {
109 unwrap(Options)->PTO.SLPVectorization = SLPVectorization;
110}
111
113 LLVMBool LoopUnrolling) {
114 unwrap(Options)->PTO.LoopUnrolling = LoopUnrolling;
115}
116
118 LLVMPassBuilderOptionsRef Options, LLVMBool ForgetAllSCEVInLoopUnroll) {
119 unwrap(Options)->PTO.ForgetAllSCEVInLoopUnroll = ForgetAllSCEVInLoopUnroll;
120}
121
123 unsigned LicmMssaOptCap) {
124 unwrap(Options)->PTO.LicmMssaOptCap = LicmMssaOptCap;
125}
126
128 LLVMPassBuilderOptionsRef Options, unsigned LicmMssaNoAccForPromotionCap) {
129 unwrap(Options)->PTO.LicmMssaNoAccForPromotionCap =
130 LicmMssaNoAccForPromotionCap;
131}
132
134 LLVMPassBuilderOptionsRef Options, LLVMBool CallGraphProfile) {
135 unwrap(Options)->PTO.CallGraphProfile = CallGraphProfile;
136}
137
139 LLVMBool MergeFunctions) {
140 unwrap(Options)->PTO.MergeFunctions = MergeFunctions;
141}
142
144 LLVMPassBuilderOptionsRef Options, int Threshold) {
145 unwrap(Options)->PTO.InlinerThreshold = Threshold;
146}
147
149 delete unwrap(Options);
150}
aarch64 promote const
#define DEFINE_SIMPLE_CONVERSION_FUNCTIONS(ty, ref)
COFF::MachineTypes Machine
Definition: COFFYAML.cpp:371
Module.h This file contains the declarations for the Module class.
#define P(N)
CGSCCAnalysisManager CGAM
static TargetMachine * unwrap(LLVMTargetMachineRef P)
const char LLVMTargetMachineRef LLVMPassBuilderOptionsRef Options
ModulePassManager MPM
LLVMPassBuilderOptions * PassOpts
Module * Mod
LoopAnalysisManager LAM
FunctionAnalysisManager FAM
ModuleAnalysisManager MAM
return LLVMErrorSuccess
const char LLVMTargetMachineRef TM
bool Debug
bool VerifyEach
PassInstrumentationCallbacks PIC
const char * Passes
PassBuilder PB(Machine, PassOpts->PTO, std::nullopt, &PIC)
This header defines a class that provides bookkeeping for all standard (i.e in-tree) pass instrumenta...
A container for analyses that lazily runs them and caches their results.
Definition: PassManager.h:253
Helper struct for holding a set of builder options for LLVMRunPasses.
LLVMPassBuilderOptions(bool DebugLogging=false, bool VerifyEach=false, PipelineTuningOptions PTO=PipelineTuningOptions())
A Module instance is used to store all the information related to an LLVM module.
Definition: Module.h:65
LLVMContext & getContext() const
Get the global data context.
Definition: Module.h:301
This class provides access to building LLVM's passes.
Definition: PassBuilder.h:106
void registerLoopAnalyses(LoopAnalysisManager &LAM)
Registers all available loop analysis passes.
void crossRegisterProxies(LoopAnalysisManager &LAM, FunctionAnalysisManager &FAM, CGSCCAnalysisManager &CGAM, ModuleAnalysisManager &MAM, MachineFunctionAnalysisManager *MFAM=nullptr)
Cross register the analysis managers through their proxies.
Error parsePassPipeline(ModulePassManager &MPM, StringRef PipelineText)
Parse a textual pass pipeline description into a ModulePassManager.
void registerModuleAnalyses(ModuleAnalysisManager &MAM)
Registers all available module analysis passes.
void registerCGSCCAnalyses(CGSCCAnalysisManager &CGAM)
Registers all available CGSCC analysis passes.
void registerFunctionAnalyses(FunctionAnalysisManager &FAM)
Registers all available function analysis passes.
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
LLVM_ATTRIBUTE_MINSIZE std::enable_if_t<!std::is_same_v< PassT, PassManager > > addPass(PassT &&Pass)
Definition: PassManager.h:195
PreservedAnalyses run(IRUnitT &IR, AnalysisManagerT &AM, ExtraArgTs... ExtraArgs)
Run all of the passes in this manager over the given unit of IR.
Tunable parameters for passes in the default pipelines.
Definition: PassBuilder.h:44
This class provides an interface to register all the standard pass instrumentations and manages their...
Primary interface to the complete machine description for the target machine.
Definition: TargetMachine.h:77
Create a verifier pass.
Definition: Verifier.h:132
void LLVMPassBuilderOptionsSetMergeFunctions(LLVMPassBuilderOptionsRef Options, LLVMBool MergeFunctions)
void LLVMPassBuilderOptionsSetDebugLogging(LLVMPassBuilderOptionsRef Options, LLVMBool DebugLogging)
Toggle debug logging when running the PassBuilder.
LLVMPassBuilderOptionsRef LLVMCreatePassBuilderOptions()
Create a new set of options for a PassBuilder.
void LLVMPassBuilderOptionsSetVerifyEach(LLVMPassBuilderOptionsRef Options, LLVMBool VerifyEach)
Toggle adding the VerifierPass for the PassBuilder, ensuring all functions inside the module is valid...
void LLVMPassBuilderOptionsSetLicmMssaOptCap(LLVMPassBuilderOptionsRef Options, unsigned LicmMssaOptCap)
void LLVMDisposePassBuilderOptions(LLVMPassBuilderOptionsRef Options)
Dispose of a heap-allocated PassBuilderOptions instance.
void LLVMPassBuilderOptionsSetLicmMssaNoAccForPromotionCap(LLVMPassBuilderOptionsRef Options, unsigned LicmMssaNoAccForPromotionCap)
void LLVMPassBuilderOptionsSetInlinerThreshold(LLVMPassBuilderOptionsRef Options, int Threshold)
void LLVMPassBuilderOptionsSetSLPVectorization(LLVMPassBuilderOptionsRef Options, LLVMBool SLPVectorization)
void LLVMPassBuilderOptionsSetCallGraphProfile(LLVMPassBuilderOptionsRef Options, LLVMBool CallGraphProfile)
void LLVMPassBuilderOptionsSetLoopVectorization(LLVMPassBuilderOptionsRef Options, LLVMBool LoopVectorization)
void LLVMPassBuilderOptionsSetLoopUnrolling(LLVMPassBuilderOptionsRef Options, LLVMBool LoopUnrolling)
typedefLLVM_C_EXTERN_C_BEGIN struct LLVMOpaquePassBuilderOptions * LLVMPassBuilderOptionsRef
A set of options passed which are attached to the Pass Manager upon run.
Definition: PassBuilder.h:38
void LLVMPassBuilderOptionsSetForgetAllSCEVInLoopUnroll(LLVMPassBuilderOptionsRef Options, LLVMBool ForgetAllSCEVInLoopUnroll)
void LLVMPassBuilderOptionsSetLoopInterleaving(LLVMPassBuilderOptionsRef Options, LLVMBool LoopInterleaving)
LLVMErrorRef LLVMRunPasses(LLVMModuleRef M, const char *Passes, LLVMTargetMachineRef TM, LLVMPassBuilderOptionsRef Options)
Construct and run a set of passes over a module.
struct LLVMOpaqueError * LLVMErrorRef
Opaque reference to an error instance.
Definition: Error.h:33
int LLVMBool
Definition: Types.h:28
struct LLVMOpaqueModule * LLVMModuleRef
The top-level container for all other LLVM Intermediate Representation (IR) objects.
Definition: Types.h:61
struct LLVMOpaqueTargetMachine * LLVMTargetMachineRef
Definition: TargetMachine.h:35
Interfaces for registering analysis passes, producing common pass manager configurations,...
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
LLVMAttributeRef wrap(Attribute Attr)
Definition: Attributes.h:315