xref: /freebsd/contrib/llvm-project/llvm/lib/Target/BPF/BPF.h (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
10b57cec5SDimitry Andric //===-- BPF.h - Top-level interface for BPF representation ------*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #ifndef LLVM_LIB_TARGET_BPF_BPF_H
100b57cec5SDimitry Andric #define LLVM_LIB_TARGET_BPF_BPF_H
110b57cec5SDimitry Andric 
120b57cec5SDimitry Andric #include "MCTargetDesc/BPFMCTargetDesc.h"
13e8d8bef9SDimitry Andric #include "llvm/IR/PassManager.h"
1481ad6265SDimitry Andric #include "llvm/Pass.h"
150b57cec5SDimitry Andric #include "llvm/Target/TargetMachine.h"
160b57cec5SDimitry Andric 
170b57cec5SDimitry Andric namespace llvm {
180b57cec5SDimitry Andric class BPFTargetMachine;
19*bdd1243dSDimitry Andric class PassRegistry;
200b57cec5SDimitry Andric 
21e8d8bef9SDimitry Andric ModulePass *createBPFAdjustOpt();
22e8d8bef9SDimitry Andric ModulePass *createBPFCheckAndAdjustIR();
230b57cec5SDimitry Andric 
24e8d8bef9SDimitry Andric FunctionPass *createBPFAbstractMemberAccess(BPFTargetMachine *TM);
25e8d8bef9SDimitry Andric FunctionPass *createBPFPreserveDIType();
26349cc55cSDimitry Andric FunctionPass *createBPFIRPeephole();
270b57cec5SDimitry Andric FunctionPass *createBPFISelDag(BPFTargetMachine &TM);
280b57cec5SDimitry Andric FunctionPass *createBPFMISimplifyPatchablePass();
290b57cec5SDimitry Andric FunctionPass *createBPFMIPeepholePass();
308bcb0991SDimitry Andric FunctionPass *createBPFMIPeepholeTruncElimPass();
310b57cec5SDimitry Andric FunctionPass *createBPFMIPreEmitPeepholePass();
320b57cec5SDimitry Andric FunctionPass *createBPFMIPreEmitCheckingPass();
330b57cec5SDimitry Andric 
34*bdd1243dSDimitry Andric void initializeBPFAbstractMemberAccessLegacyPassPass(PassRegistry &);
35e8d8bef9SDimitry Andric void initializeBPFAdjustOptPass(PassRegistry&);
36e8d8bef9SDimitry Andric void initializeBPFCheckAndAdjustIRPass(PassRegistry&);
37*bdd1243dSDimitry Andric void initializeBPFDAGToDAGISelPass(PassRegistry &);
38349cc55cSDimitry Andric void initializeBPFIRPeepholePass(PassRegistry &);
390b57cec5SDimitry Andric void initializeBPFMIPeepholePass(PassRegistry&);
408bcb0991SDimitry Andric void initializeBPFMIPeepholeTruncElimPass(PassRegistry &);
410b57cec5SDimitry Andric void initializeBPFMIPreEmitCheckingPass(PassRegistry&);
42*bdd1243dSDimitry Andric void initializeBPFMIPreEmitPeepholePass(PassRegistry &);
43*bdd1243dSDimitry Andric void initializeBPFMISimplifyPatchablePass(PassRegistry &);
44*bdd1243dSDimitry Andric void initializeBPFPreserveDITypePass(PassRegistry &);
45e8d8bef9SDimitry Andric 
46e8d8bef9SDimitry Andric class BPFAbstractMemberAccessPass
47e8d8bef9SDimitry Andric     : public PassInfoMixin<BPFAbstractMemberAccessPass> {
48e8d8bef9SDimitry Andric   BPFTargetMachine *TM;
49e8d8bef9SDimitry Andric 
50e8d8bef9SDimitry Andric public:
51e8d8bef9SDimitry Andric   BPFAbstractMemberAccessPass(BPFTargetMachine *TM) : TM(TM) {}
52e8d8bef9SDimitry Andric   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
53e8d8bef9SDimitry Andric 
54e8d8bef9SDimitry Andric   static bool isRequired() { return true; }
55e8d8bef9SDimitry Andric };
56e8d8bef9SDimitry Andric 
57e8d8bef9SDimitry Andric class BPFPreserveDITypePass : public PassInfoMixin<BPFPreserveDITypePass> {
58e8d8bef9SDimitry Andric public:
59e8d8bef9SDimitry Andric   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
60e8d8bef9SDimitry Andric 
61e8d8bef9SDimitry Andric   static bool isRequired() { return true; }
62e8d8bef9SDimitry Andric };
63e8d8bef9SDimitry Andric 
64349cc55cSDimitry Andric class BPFIRPeepholePass : public PassInfoMixin<BPFIRPeepholePass> {
65349cc55cSDimitry Andric public:
66349cc55cSDimitry Andric   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
67349cc55cSDimitry Andric 
68349cc55cSDimitry Andric   static bool isRequired() { return true; }
69349cc55cSDimitry Andric };
70349cc55cSDimitry Andric 
71e8d8bef9SDimitry Andric class BPFAdjustOptPass : public PassInfoMixin<BPFAdjustOptPass> {
72e8d8bef9SDimitry Andric public:
73e8d8bef9SDimitry Andric   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
74e8d8bef9SDimitry Andric };
75e8d8bef9SDimitry Andric } // namespace llvm
760b57cec5SDimitry Andric 
770b57cec5SDimitry Andric #endif
78