1//===- BPFCORE.h - Common info for Compile-Once Run-EveryWhere -*- 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
9#ifndef LLVM_LIB_TARGET_BPF_BPFCORE_H
10#define LLVM_LIB_TARGET_BPF_BPFCORE_H
11
12#include "llvm/ADT/StringRef.h"
13#include "llvm/IR/Instructions.h"
14
15namespace llvm {
16
17class BasicBlock;
18class Instruction;
19class Module;
20
21class BPFCoreSharedInfo {
22public:
23 enum BTFTypeIdFlag : uint32_t {
24 BTF_TYPE_ID_LOCAL_RELOC = 0,
25 BTF_TYPE_ID_REMOTE_RELOC,
26
27 MAX_BTF_TYPE_ID_FLAG,
28 };
29
30 enum PreserveTypeInfo : uint32_t {
31 PRESERVE_TYPE_INFO_EXISTENCE = 0,
32 PRESERVE_TYPE_INFO_SIZE,
33 PRESERVE_TYPE_INFO_MATCH,
34
35 MAX_PRESERVE_TYPE_INFO_FLAG,
36 };
37
38 enum PreserveEnumValue : uint32_t {
39 PRESERVE_ENUM_VALUE_EXISTENCE = 0,
40 PRESERVE_ENUM_VALUE,
41
42 MAX_PRESERVE_ENUM_VALUE_FLAG,
43 };
44
45 /// The attribute attached to globals representing a field access
46 static constexpr StringRef AmaAttr = "btf_ama";
47 /// The attribute attached to globals representing a type id
48 static constexpr StringRef TypeIdAttr = "btf_type_id";
49
50 /// llvm.bpf.passthrough builtin seq number
51 static uint32_t SeqNum;
52
53 /// Insert a bpf passthrough builtin function.
54 static Instruction *insertPassThrough(Module *M, BasicBlock *BB,
55 Instruction *Input,
56 Instruction *Before);
57 static void removeArrayAccessCall(CallInst *Call);
58 static void removeStructAccessCall(CallInst *Call);
59 static void removeUnionAccessCall(CallInst *Call);
60};
61
62} // namespace llvm
63
64#endif
65