1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* Register Bank Source Fragments *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* *|
7\*===----------------------------------------------------------------------===*/
8
9#ifdef GET_REGBANK_DECLARATIONS
10#undef GET_REGBANK_DECLARATIONS
11
12namespace llvm::BPF {
13
14enum : unsigned {
15 InvalidRegBankID = ~0u,
16 GPRRegBankID = 0,
17 NumRegisterBanks,
18};
19
20} // namespace llvm::BPF
21
22#endif // GET_REGBANK_DECLARATIONS
23
24#ifdef GET_TARGET_REGBANK_CLASS
25#undef GET_TARGET_REGBANK_CLASS
26
27private:
28 static const RegisterBank *RegBanks[];
29 static const unsigned Sizes[];
30
31public:
32 const RegisterBank &getRegBankFromRegClass(const TargetRegisterClass &RC, LLT Ty) const override;
33protected:
34 BPFGenRegisterBankInfo(unsigned HwMode = 0);
35
36
37#endif // GET_TARGET_REGBANK_CLASS
38
39#ifdef GET_TARGET_REGBANK_IMPL
40#undef GET_TARGET_REGBANK_IMPL
41
42namespace llvm {
43
44namespace BPF {
45
46const uint32_t GPRRegBankCoverageData[] = {
47 // 0-31
48 (1u << (BPF::GPRRegClassID - 0)) |
49 (1u << (BPF::GPR32RegClassID - 0)) |
50 0,
51};
52
53constexpr RegisterBank GPRRegBank(/* ID */ BPF::GPRRegBankID, /* Name */ "GPRB", /* CoveredRegClasses */ GPRRegBankCoverageData, /* NumRegClasses */ 2);
54
55} // namespace BPF
56
57const RegisterBank *BPFGenRegisterBankInfo::RegBanks[] = {
58 &BPF::GPRRegBank,
59};
60
61const unsigned BPFGenRegisterBankInfo::Sizes[] = {
62 // Mode = 0 (Default)
63 64,
64};
65
66BPFGenRegisterBankInfo::BPFGenRegisterBankInfo(unsigned HwMode)
67 : RegisterBankInfo(RegBanks, BPF::NumRegisterBanks, Sizes, HwMode) {
68 // Assert that RegBank indices match their ID's
69#ifndef NDEBUG
70 for (auto RB : enumerate(RegBanks))
71 assert(RB.index() == RB.value()->getID() && "Index != ID");
72#endif // NDEBUG
73}
74
75const RegisterBank &
76BPFGenRegisterBankInfo::getRegBankFromRegClass(const TargetRegisterClass &RC, LLT) const {
77 static const uint32_t RegClass2RegBank[1] = {
78 (uint32_t(BPF::GPRRegBankID) << 0) | // GPR32RegClassID
79 (uint32_t(BPF::GPRRegBankID) << 1) // GPRRegClassID
80 };
81 const unsigned RegClassID = RC.getID();
82 if (LLVM_LIKELY(RegClassID < 2)) {
83 unsigned RegBankID = (RegClass2RegBank[RegClassID / 32] >> ((RegClassID % 32) * 1)) & 1;
84 return getRegBank(RegBankID);
85 }
86 llvm_unreachable(llvm::Twine("Target needs to handle register class ID 0x").concat(llvm::Twine::utohexstr(RegClassID)).str().c_str());
87}
88
89} // namespace llvm
90
91#endif // GET_TARGET_REGBANK_IMPL
92
93