Path: blob/main/contrib/llvm-project/llvm/lib/Target/BPF/BPF.h
35269 views
//===-- BPF.h - Top-level interface for BPF representation ------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLVM_LIB_TARGET_BPF_BPF_H9#define LLVM_LIB_TARGET_BPF_BPF_H1011#include "MCTargetDesc/BPFMCTargetDesc.h"12#include "llvm/IR/Instructions.h"13#include "llvm/IR/PassManager.h"14#include "llvm/Pass.h"15#include "llvm/Target/TargetMachine.h"1617namespace llvm {18class BPFRegisterBankInfo;19class BPFSubtarget;20class BPFTargetMachine;21class InstructionSelector;22class PassRegistry;2324ModulePass *createBPFCheckAndAdjustIR();2526FunctionPass *createBPFISelDag(BPFTargetMachine &TM);27FunctionPass *createBPFMISimplifyPatchablePass();28FunctionPass *createBPFMIPeepholePass();29FunctionPass *createBPFMIPreEmitPeepholePass();30FunctionPass *createBPFMIPreEmitCheckingPass();3132InstructionSelector *createBPFInstructionSelector(const BPFTargetMachine &,33const BPFSubtarget &,34const BPFRegisterBankInfo &);3536void initializeBPFCheckAndAdjustIRPass(PassRegistry&);37void initializeBPFDAGToDAGISelLegacyPass(PassRegistry &);38void initializeBPFMIPeepholePass(PassRegistry &);39void initializeBPFMIPreEmitCheckingPass(PassRegistry&);40void initializeBPFMIPreEmitPeepholePass(PassRegistry &);41void initializeBPFMISimplifyPatchablePass(PassRegistry &);4243class BPFAbstractMemberAccessPass44: public PassInfoMixin<BPFAbstractMemberAccessPass> {45BPFTargetMachine *TM;4647public:48BPFAbstractMemberAccessPass(BPFTargetMachine *TM) : TM(TM) {}49PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);5051static bool isRequired() { return true; }52};5354class BPFPreserveDITypePass : public PassInfoMixin<BPFPreserveDITypePass> {55public:56PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);5758static bool isRequired() { return true; }59};6061class BPFIRPeepholePass : public PassInfoMixin<BPFIRPeepholePass> {62public:63PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);6465static bool isRequired() { return true; }66};6768class BPFASpaceCastSimplifyPass69: public PassInfoMixin<BPFASpaceCastSimplifyPass> {70public:71PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);7273static bool isRequired() { return true; }74};7576class BPFAdjustOptPass : public PassInfoMixin<BPFAdjustOptPass> {77public:78PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);79};8081class BPFPreserveStaticOffsetPass82: public PassInfoMixin<BPFPreserveStaticOffsetPass> {83bool AllowPartial;8485public:86BPFPreserveStaticOffsetPass(bool AllowPartial) : AllowPartial(AllowPartial) {}87PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);8889static bool isRequired() { return true; }9091static std::pair<GetElementPtrInst *, LoadInst *>92reconstructLoad(CallInst *Call);9394static std::pair<GetElementPtrInst *, StoreInst *>95reconstructStore(CallInst *Call);96};9798} // namespace llvm99100#endif101102103