[llvm] [ADT] Make ilist_select_iterator_type a type alias (NFC) (PR #160446)
Kazu Hirata via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 23 22:58:52 PDT 2025
https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/160446
Without this patch, we have:
template <bool use_iterator_bits, typename Opts, bool arg1, bool arg2>
struct ilist_select_iterator_type {
using type = ...;
}
This means that we must reference "type" with somewhat mouthful:
typename ilist_select_iterator_type<...>::type
This patch simplifies the reference by making
ilist_select_iterator_type a type alias.
Now, we always obtain "bool use_iterator_bit" from
OptionsT::has_iterator_bits, so this patch folds the logic into the
type alias.
>From d24b71b65d76153d27119b3bee1881c15f80a2b5 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Sun, 21 Sep 2025 16:28:44 -0700
Subject: [PATCH] [ADT] Make ilist_select_iterator_type a type alias (NFC)
Without this patch, we have:
template <bool use_iterator_bits, typename Opts, bool arg1, bool arg2>
struct ilist_select_iterator_type {
using type = ...;
}
This means that we must reference "type" with somewhat mouthful:
typename ilist_select_iterator_type<...>::type
This patch simplifies the reference by making
ilist_select_iterator_type a type alias.
Now, we always obtain "bool use_iterator_bit" from
OptionsT::has_iterator_bits, so this patch folds the logic into the
type alias.
---
llvm/include/llvm/ADT/ilist_node.h | 25 +++++++++----------------
llvm/include/llvm/ADT/simple_ilist.h | 15 ++++-----------
2 files changed, 13 insertions(+), 27 deletions(-)
diff --git a/llvm/include/llvm/ADT/ilist_node.h b/llvm/include/llvm/ADT/ilist_node.h
index 8d78d5dbbda44..2af1c6ebbffce 100644
--- a/llvm/include/llvm/ADT/ilist_node.h
+++ b/llvm/include/llvm/ADT/ilist_node.h
@@ -51,12 +51,11 @@ class ilist_iterator_w_bits;
template <class OptionsT> class ilist_sentinel;
// Selector for which iterator type to pick given the iterator-bits node option.
-template <bool use_iterator_bits, typename Opts, bool arg1, bool arg2>
-struct ilist_select_iterator_type {
- using type = std::conditional_t<use_iterator_bits,
- ilist_iterator_w_bits<Opts, arg1, arg2>,
- ilist_iterator<Opts, arg1, arg2>>;
-};
+template <class OptionsT, bool IsReverse, bool IsConst>
+using ilist_select_iterator_type =
+ std::conditional_t<OptionsT::has_iterator_bits,
+ ilist_iterator_w_bits<OptionsT, IsReverse, IsConst>,
+ ilist_iterator<OptionsT, IsReverse, IsConst>>;
/// Implementation for an ilist node.
///
@@ -91,18 +90,12 @@ class ilist_node_impl
friend class ilist_iterator_w_bits<OptionsT, true, true>;
protected:
- using self_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- false, false>::type;
- using const_self_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- false, true>::type;
+ using self_iterator = ilist_select_iterator_type<OptionsT, false, false>;
+ using const_self_iterator = ilist_select_iterator_type<OptionsT, false, true>;
using reverse_self_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- true, false>::type;
+ ilist_select_iterator_type<OptionsT, true, false>;
using const_reverse_self_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- true, true>::type;
+ ilist_select_iterator_type<OptionsT, true, true>;
ilist_node_impl() = default;
diff --git a/llvm/include/llvm/ADT/simple_ilist.h b/llvm/include/llvm/ADT/simple_ilist.h
index 7236b3fa5a7d2..fcb2e41f62bf0 100644
--- a/llvm/include/llvm/ADT/simple_ilist.h
+++ b/llvm/include/llvm/ADT/simple_ilist.h
@@ -92,18 +92,11 @@ class simple_ilist
using reference = typename OptionsT::reference;
using const_pointer = typename OptionsT::const_pointer;
using const_reference = typename OptionsT::const_reference;
- using iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- false, false>::type;
- using const_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- false, true>::type;
- using reverse_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- true, false>::type;
+ using iterator = ilist_select_iterator_type<OptionsT, false, false>;
+ using const_iterator = ilist_select_iterator_type<OptionsT, false, true>;
+ using reverse_iterator = ilist_select_iterator_type<OptionsT, true, false>;
using const_reverse_iterator =
- typename ilist_select_iterator_type<OptionsT::has_iterator_bits, OptionsT,
- true, true>::type;
+ ilist_select_iterator_type<OptionsT, true, true>;
using size_type = size_t;
using difference_type = ptrdiff_t;
More information about the llvm-commits
mailing list