[llvm] [ADT] Move IsSizeLessThanThresholdT into AdjustedParamTBase (NFC) (PR #159900)
Kazu Hirata via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 19 22:05:16 PDT 2025
https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/159900
This patch moves IsSizeLessThanThresholdT into AdjustedParamTBase, the
sole user of the helper, while switching to a type alias.
Aside from moving the helper closer to where it's used, another
benefit is that we can assume that T is a complete type inside
AdjustedParamTBase. Note that sizeof(T) serves as a check for a
complete type. Inside AdjustedParamTBase, we only pass complete
non-void types to:
std::is_trivially_copy_constructible<T>
std::is_trivially_move_constructible<T>
so we can safely drop the fallback case implemented with
std::false_type.
>From 162bd5359280beab09ddba5c836f92fd98de3f76 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Tue, 16 Sep 2025 12:49:57 -0700
Subject: [PATCH] [ADT] Move IsSizeLessThanThresholdT into AdjustedParamTBase
(NFC)
This patch moves IsSizeLessThanThresholdT into AdjustedParamTBase, the
sole user of the helper, while switching to a type alias.
Aside from moving the helper closer to where it's used, another
benefit is that we can assume that T is a complete type inside
AdjustedParamTBase. Note that sizeof(T) serves as a check for a
complete type. Inside AdjustedParamTBase, we only pass complete
non-void types to:
std::is_trivially_copy_constructible<T>
std::is_trivially_move_constructible<T>
so we can safely drop the fallback case implemented with
std::false_type.
---
llvm/include/llvm/ADT/FunctionExtras.h | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/llvm/include/llvm/ADT/FunctionExtras.h b/llvm/include/llvm/ADT/FunctionExtras.h
index d92868e3715f4..e45d507bfd4bf 100644
--- a/llvm/include/llvm/ADT/FunctionExtras.h
+++ b/llvm/include/llvm/ADT/FunctionExtras.h
@@ -82,13 +82,6 @@ template <typename ReturnT, typename... ParamTs> class UniqueFunctionBase {
static constexpr size_t InlineStorageSize = sizeof(void *) * 3;
static constexpr size_t InlineStorageAlign = alignof(void *);
- template <typename T, class = void>
- struct IsSizeLessThanThresholdT : std::false_type {};
-
- template <typename T>
- struct IsSizeLessThanThresholdT<
- T, std::enable_if_t<sizeof(T) <= 2 * sizeof(void *)>> : std::true_type {};
-
// Provide a type function to map parameters that won't observe extra copies
// or moves and which are small enough to likely pass in register to values
// and all other types to l-value reference types. We use this to compute the
@@ -101,6 +94,9 @@ template <typename ReturnT, typename... ParamTs> class UniqueFunctionBase {
template <typename T> struct AdjustedParamTBase {
static_assert(!std::is_reference<T>::value,
"references should be handled by template specialization");
+ template <typename U>
+ using IsSizeLessThanThresholdT =
+ std::bool_constant<sizeof(U) <= 2 * sizeof(void *)>;
using type =
std::conditional_t<std::is_trivially_copy_constructible<T>::value &&
std::is_trivially_move_constructible<T>::value &&
More information about the llvm-commits
mailing list