[llvm] d6b7ac8 - [IR] Simplify HasCachedHash with is_detected (NFC) (#159510)

via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 18 08:55:45 PDT 2025


Author: Kazu Hirata
Date: 2025-09-18T08:55:41-07:00
New Revision: d6b7ac830ab4c1b26a1b2eecd15306eccf9cea90

URL: https://github.com/llvm/llvm-project/commit/d6b7ac830ab4c1b26a1b2eecd15306eccf9cea90
DIFF: https://github.com/llvm/llvm-project/commit/d6b7ac830ab4c1b26a1b2eecd15306eccf9cea90.diff

LOG: [IR] Simplify HasCachedHash with is_detected (NFC) (#159510)

With is_detected, we don't need to implement a SFINAE trick on our own.

Added: 
    

Modified: 
    llvm/lib/IR/Metadata.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/IR/Metadata.cpp b/llvm/lib/IR/Metadata.cpp
index fc78a5b299f49..09e25ceaf59c3 100644
--- a/llvm/lib/IR/Metadata.cpp
+++ b/llvm/lib/IR/Metadata.cpp
@@ -986,15 +986,10 @@ static T *uniquifyImpl(T *N, DenseSet<T *, InfoT> &Store) {
 }
 
 template <class NodeTy> struct MDNode::HasCachedHash {
-  using Yes = char[1];
-  using No = char[2];
-  template <class U, U Val> struct SFINAE {};
-
   template <class U>
-  static Yes &check(SFINAE<void (U::*)(unsigned), &U::setHash> *);
-  template <class U> static No &check(...);
+  using check = decltype(static_cast<void (U::*)(unsigned)>(&U::setHash));
 
-  static const bool value = sizeof(check<NodeTy>(nullptr)) == sizeof(Yes);
+  static constexpr bool value = is_detected<check, NodeTy>::value;
 };
 
 MDNode *MDNode::uniquify() {


        


More information about the llvm-commits mailing list