[llvm] [AMDGPU] Simplify "class HasMember##member" with llvm::is_detected (NFC) (PR #160037)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 21 23:56:12 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Kazu Hirata (kazutakahirata)
<details>
<summary>Changes</summary>
"class HasMember##member" detects a specific member with a complex
SFINAE logic involving multiple inheritance. This patch simplifies
that by switching to llvm::is_detected.
---
Full diff: https://github.com/llvm/llvm-project/pull/160037.diff
1 Files Affected:
- (modified) llvm/lib/Target/AMDGPU/Utils/AMDKernelCodeTUtils.cpp (+2-10)
``````````diff
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDKernelCodeTUtils.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDKernelCodeTUtils.cpp
index b0ed1e5e5c52b..24251e12d57dc 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDKernelCodeTUtils.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDKernelCodeTUtils.cpp
@@ -40,20 +40,12 @@ using namespace llvm::AMDGPU;
// returns.
#define GEN_HAS_MEMBER(member) \
class HasMember##member { \
- private: \
- struct KnownWithMember { \
- int member; \
- }; \
- class AmbiguousDerived : public AMDGPUMCKernelCodeT, \
- public KnownWithMember {}; \
template <typename U> \
- static constexpr std::false_type Test(decltype(U::member) *); \
- template <typename U> static constexpr std::true_type Test(...); \
+ using check_member = decltype(std::declval<U>().member); \
\
public: \
static constexpr bool RESULT = \
- std::is_same_v<decltype(Test<AmbiguousDerived>(nullptr)), \
- std::true_type>; \
+ llvm::is_detected<check_member, AMDGPUMCKernelCodeT>::value; \
}; \
class IsMCExpr##member { \
template <typename U> \
``````````
</details>
https://github.com/llvm/llvm-project/pull/160037
More information about the llvm-commits
mailing list