10#ifndef AIE_REGISTER_DATABASE_H
11#define AIE_REGISTER_DATABASE_H
13#include "llvm/ADT/DenseMap.h"
14#include "llvm/ADT/StringMap.h"
15#include "llvm/ADT/StringRef.h"
16#include "llvm/Support/JSON.h"
60class RegisterDatabase {
63 static std::unique_ptr<RegisterDatabase>
loadAIE2();
67 llvm::StringRef module)
const;
75 llvm::StringRef module)
const;
78 std::optional<uint32_t>
lookupEvent(llvm::StringRef name,
79 llvm::StringRef module)
const;
84 uint32_t value)
const;
87 RegisterDatabase() =
default;
89 bool loadFromJSON(llvm::StringRef registerPath, llvm::StringRef eventPath);
93 void buildOffsetIndex();
95 llvm::StringMap<RegisterInfo> registers_;
96 llvm::StringMap<EventInfo> events_;
100 llvm::StringMap<llvm::DenseMap<uint32_t, const RegisterInfo *>>
std::optional< uint32_t > encodeFieldValue(const BitFieldInfo &field, uint32_t value) const
Encode a value for a specific bitfield.
static std::unique_ptr< RegisterDatabase > loadAIE2()
Load database for AIE2 architecture.
const RegisterInfo * lookupRegister(llvm::StringRef name, llvm::StringRef module) const
Lookup register by name and module.
std::optional< uint32_t > lookupEvent(llvm::StringRef name, llvm::StringRef module) const
Lookup event by name and module.
const RegisterInfo * lookupRegisterByOffset(uint32_t offset, llvm::StringRef module) const
Lookup register by tile-relative offset and module name.
Bit field information for a register.
uint32_t getWidth() const
const BitFieldInfo * getField(llvm::StringRef fieldName) const
std::vector< BitFieldInfo > bit_fields