diff options
Diffstat (limited to 'contrib/llvm-project/llvm/include/llvm/CodeGen/AccelTable.h')
-rw-r--r-- | contrib/llvm-project/llvm/include/llvm/CodeGen/AccelTable.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/contrib/llvm-project/llvm/include/llvm/CodeGen/AccelTable.h b/contrib/llvm-project/llvm/include/llvm/CodeGen/AccelTable.h index 6eb09f32f9f9..0638fbffda4f 100644 --- a/contrib/llvm-project/llvm/include/llvm/CodeGen/AccelTable.h +++ b/contrib/llvm-project/llvm/include/llvm/CodeGen/AccelTable.h @@ -143,6 +143,15 @@ public: std::vector<AccelTableData *> Values; MCSymbol *Sym; + /// Get all AccelTableData cast as a `T`. + template <typename T = AccelTableData *> auto getValues() const { + static_assert(std::is_pointer<T>()); + static_assert( + std::is_base_of<AccelTableData, std::remove_pointer_t<T>>()); + return map_range( + Values, [](AccelTableData *Data) { return static_cast<T>(Data); }); + } + #ifndef NDEBUG void print(raw_ostream &OS) const; void dump() const { print(dbgs()); } @@ -319,8 +328,7 @@ public: /// Needs to be called after DIE offsets are computed. void convertDieToOffset() { for (auto &Entry : Entries) { - for (AccelTableData *Value : Entry.second.Values) { - DWARF5AccelTableData *Data = static_cast<DWARF5AccelTableData *>(Value); + for (auto *Data : Entry.second.getValues<DWARF5AccelTableData *>()) { // For TU we normalize as each Unit is emitted. // So when this is invoked after CU construction we will be in mixed // state. @@ -332,8 +340,7 @@ public: void addTypeEntries(DWARF5AccelTable &Table) { for (auto &Entry : Table.getEntries()) { - for (AccelTableData *Value : Entry.second.Values) { - DWARF5AccelTableData *Data = static_cast<DWARF5AccelTableData *>(Value); + for (auto *Data : Entry.second.getValues<DWARF5AccelTableData *>()) { addName(Entry.second.Name, Data->getDieOffset(), Data->getDieTag(), Data->getUnitID(), true); } |