docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
docc_pass.h
Go to the documentation of this file.
1#pragma once
2
3#include <llvm/IR/Function.h>
4#include <llvm/IR/Module.h>
5#include <llvm/Passes/PassBuilder.h>
6#include <llvm/Passes/PassPlugin.h>
7
8#include <memory>
9#include <thread>
10
13
14namespace docc {
15namespace passes {
16
17template<typename PassT>
18class DOCCPass : public llvm::PassInfoMixin<DOCCPass<PassT>> {
19public:
20 DOCCPass(PassT Impl, analysis::AnalysisManager& AM) : Impl_(std::move(Impl)), AM_(AM) {
21 }
22
23 template<typename... Ts>
24 llvm::PreservedAnalyses run(llvm::Module& Mod, llvm::ModuleAnalysisManager& MAM) {
25 if (!PassT::available(AM_)) {
26 return llvm::PreservedAnalyses::all();
27 }
28
29 return Impl_.run(Mod, MAM, AM_);
30 }
31
32private:
33 PassT Impl_;
35};
36
37template<typename PassT>
39 return DOCCPass<PassT>(std::move(Pass), AM);
40}
41
42} // namespace passes
43} // namespace docc
Definition analysis.h:25
Definition docc_pass.h:18
DOCCPass(PassT Impl, analysis::AnalysisManager &AM)
Definition docc_pass.h:20
llvm::PreservedAnalyses run(llvm::Module &Mod, llvm::ModuleAnalysisManager &MAM)
Definition docc_pass.h:24
Definition code_generation_pass.h:14
DOCCPass< PassT > createDOCCPass(PassT Pass, analysis::AnalysisManager &AM)
Definition docc_pass.h:38
Definition targets.h:8