mirror of
https://github.com/ROCm/composable_kernel.git
synced 2026-04-19 14:29:05 +00:00
63 lines
1.3 KiB
C++
63 lines
1.3 KiB
C++
// Copyright (c) Advanced Micro Devices, Inc., or its affiliates.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#pragma once
|
|
|
|
#include "ck/ck.hpp"
|
|
#include "integral_constant.hpp"
|
|
#include "sequence.hpp"
|
|
#include "tuple.hpp"
|
|
|
|
namespace ck {
|
|
|
|
template <typename T>
|
|
struct is_known_at_compile_time;
|
|
|
|
template <>
|
|
struct is_known_at_compile_time<index_t>
|
|
{
|
|
static constexpr bool value = false;
|
|
};
|
|
|
|
template <>
|
|
struct is_known_at_compile_time<unsigned int>
|
|
{
|
|
static constexpr bool value = false;
|
|
};
|
|
|
|
template <>
|
|
struct is_known_at_compile_time<long_index_t>
|
|
{
|
|
static constexpr bool value = false;
|
|
};
|
|
|
|
template <typename T, T X>
|
|
struct is_known_at_compile_time<integral_constant<T, X>>
|
|
{
|
|
static constexpr bool value = true;
|
|
};
|
|
|
|
template <index_t... Is>
|
|
struct is_known_at_compile_time<Sequence<Is...>>
|
|
{
|
|
static constexpr bool value = true;
|
|
};
|
|
|
|
template <typename... Ts>
|
|
struct is_known_at_compile_time<Tuple<Ts...>>
|
|
{
|
|
__host__ __device__ static constexpr bool IsKnownAtCompileTime()
|
|
{
|
|
return container_reduce(
|
|
Tuple<Ts...>{},
|
|
[](auto x, bool r) {
|
|
return is_known_at_compile_time<remove_cvref_t<decltype(x)>>::value & r;
|
|
},
|
|
true);
|
|
}
|
|
|
|
static constexpr bool value = IsKnownAtCompileTime();
|
|
};
|
|
|
|
} // namespace ck
|