From 0cdd7f7b59f9cf27262319b5826100169968c102 Mon Sep 17 00:00:00 2001 From: Mike Smith Date: Tue, 4 Feb 2025 17:17:26 +0800 Subject: [PATCH] better isa implementation --- include/luisa/xir/pool.h | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/include/luisa/xir/pool.h b/include/luisa/xir/pool.h index b7d413427..1850f25e7 100644 --- a/include/luisa/xir/pool.h +++ b/include/luisa/xir/pool.h @@ -8,21 +8,18 @@ namespace luisa::compute::xir { -#define LUISA_XIR_DEFINED_ISA_METHOD(BaseType, base_name) \ - template \ - requires std::derived_from \ - [[nodiscard]] bool isa() const noexcept { \ - if constexpr (std::is_same_v) { \ - return true; \ - } else { \ - using ImmediateDerived = typename Derived::derived_##base_name##_type; \ - if constexpr (std::is_final_v) { \ - return derived_##base_name##_tag() == Derived::static_derived_##base_name##_tag(); \ - } else { \ - return derived_##base_name##_tag() == Derived::static_derived_##base_name##_tag() && \ - static_cast(this)->template isa(); \ - } \ - } \ +#define LUISA_XIR_DEFINED_ISA_METHOD(BaseType, base_name) \ + template \ + requires std::derived_from \ + [[nodiscard]] bool isa() const noexcept { \ + if constexpr (std::is_same_v) { \ + return true; \ + } else { \ + using ImmediateDerived = typename Derived::derived_##base_name##_type; \ + return derived_##base_name##_tag() == Derived::static_derived_##base_name##_tag() && \ + (std::is_final_v || std::is_same_v || \ + static_cast(this)->template isa()); \ + } \ } class Pool;