aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/llvm/include/llvm/CodeGen/AccelTable.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/llvm/include/llvm/CodeGen/AccelTable.h')
-rw-r--r--contrib/llvm-project/llvm/include/llvm/CodeGen/AccelTable.h15
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);
}