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 
15 namespace llvm {
16 
17 class BasicBlock;
18 class Instruction;
19 class Module;
20 
21 class BPFCoreSharedInfo {
22 public:
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