|
4 | 4 | // See https://llvm.org/LICENSE.txt for license information.
|
5 | 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
6 | 6 | //
|
7 |
| -// (c) Copyright 2023-2024 Advanced Micro Devices, Inc. or its affiliates |
| 7 | +// (c) Copyright 2024 Advanced Micro Devices, Inc. or its affiliates |
8 | 8 | //
|
9 | 9 | //===----------------------------------------------------------------------===//
|
10 | 10 | //
|
11 | 11 | // This file declares the AIEngine V2 Address Space and DM banks
|
12 | 12 | //
|
13 | 13 | //===----------------------------------------------------------------------===//
|
14 | 14 |
|
| 15 | +#include "AIEBaseAddrSpaceInfo.h" |
| 16 | +#include <bitset> |
| 17 | + |
15 | 18 | #ifndef LLVM_SUPPORT_AIE2ADDRSPACE_H
|
16 | 19 | #define LLVM_SUPPORT_AIE2ADDRSPACE_H
|
17 | 20 |
|
@@ -41,6 +44,73 @@ enum class AddressSpaces {
|
41 | 44 | enum class AIEBanks { A, B, C, D, TileMemory };
|
42 | 45 |
|
43 | 46 | } // end namespace AIE2
|
| 47 | + |
| 48 | +class AIE2AddrSpaceInfo final : public AIEBaseAddrSpaceInfo { |
| 49 | + |
| 50 | +public: |
| 51 | + MemoryBankBits getDefaultMemoryBank() const override { |
| 52 | + std::bitset<32> MemoryBanks; |
| 53 | + using namespace AIE2; |
| 54 | + MemoryBanks.set(static_cast<unsigned>(AIEBanks::A)) |
| 55 | + .set(static_cast<unsigned>(AIEBanks::B)) |
| 56 | + .set(static_cast<unsigned>(AIEBanks::C)) |
| 57 | + .set(static_cast<unsigned>(AIEBanks::D)); |
| 58 | + return MemoryBanks.to_ulong(); |
| 59 | + } |
| 60 | + |
| 61 | + MemoryBankBits |
| 62 | + getMemoryBanksFromAddressSpace(unsigned AddrSpace) const override { |
| 63 | + std::bitset<32> MemoryBanks; |
| 64 | + using namespace AIE2; |
| 65 | + switch (static_cast<AddressSpaces>(AddrSpace)) { |
| 66 | + case AddressSpaces::a: |
| 67 | + MemoryBanks.set(static_cast<unsigned>(AIEBanks::A)); |
| 68 | + break; |
| 69 | + case AddressSpaces::b: |
| 70 | + MemoryBanks.set(static_cast<unsigned>(AIEBanks::B)); |
| 71 | + break; |
| 72 | + case AddressSpaces::c: |
| 73 | + MemoryBanks.set(static_cast<unsigned>(AIEBanks::C)); |
| 74 | + break; |
| 75 | + case AddressSpaces::d: |
| 76 | + MemoryBanks.set(static_cast<unsigned>(AIEBanks::D)); |
| 77 | + break; |
| 78 | + case AddressSpaces::ab: |
| 79 | + MemoryBanks.set(static_cast<unsigned>(AIEBanks::A)) |
| 80 | + .set(static_cast<unsigned>(AIEBanks::B)); |
| 81 | + break; |
| 82 | + case AddressSpaces::ac: |
| 83 | + MemoryBanks.set(static_cast<unsigned>(AIEBanks::A)) |
| 84 | + .set(static_cast<unsigned>(AIEBanks::C)); |
| 85 | + break; |
| 86 | + case AddressSpaces::ad: |
| 87 | + MemoryBanks.set(static_cast<unsigned>(AIEBanks::A)) |
| 88 | + .set(static_cast<unsigned>(AIEBanks::D)); |
| 89 | + break; |
| 90 | + case AddressSpaces::bc: |
| 91 | + MemoryBanks.set(static_cast<unsigned>(AIEBanks::B)) |
| 92 | + .set(static_cast<unsigned>(AIEBanks::C)); |
| 93 | + break; |
| 94 | + case AddressSpaces::bd: |
| 95 | + MemoryBanks.set(static_cast<unsigned>(AIEBanks::B)) |
| 96 | + .set(static_cast<unsigned>(AIEBanks::D)); |
| 97 | + break; |
| 98 | + case AddressSpaces::cd: |
| 99 | + MemoryBanks.set(static_cast<unsigned>(AIEBanks::C)) |
| 100 | + .set(static_cast<unsigned>(AIEBanks::D)); |
| 101 | + break; |
| 102 | + case AddressSpaces::TM: |
| 103 | + MemoryBanks.set(static_cast<unsigned>(AIEBanks::TileMemory)); |
| 104 | + break; |
| 105 | + default: |
| 106 | + MemoryBanks.set(); |
| 107 | + break; |
| 108 | + } |
| 109 | + |
| 110 | + return MemoryBanks.to_ulong(); |
| 111 | + } |
| 112 | +}; |
| 113 | + |
44 | 114 | } // end namespace llvm
|
45 | 115 |
|
46 | 116 | #endif // LLVM_SUPPORT_AIE2ADDRSPACE_H
|
0 commit comments