diff --git a/llvm/include/llvm/IR/Metadata.h b/llvm/include/llvm/IR/Metadata.h index 4ba31b5545cb2..990bdc618f240 100644 --- a/llvm/include/llvm/IR/Metadata.h +++ b/llvm/include/llvm/IR/Metadata.h @@ -1410,18 +1410,14 @@ class MDNode : public Metadata { void eraseFromStore(); template struct HasCachedHash; - template - static void dispatchRecalculateHash(NodeTy *N, std::true_type) { - N->recalculateHash(); - } - template - static void dispatchRecalculateHash(NodeTy *, std::false_type) {} - template - static void dispatchResetHash(NodeTy *N, std::true_type) { - N->setHash(0); - } - template - static void dispatchResetHash(NodeTy *, std::false_type) {} + template static void dispatchRecalculateHash(NodeTy *N) { + if constexpr (HasCachedHash::value) + N->recalculateHash(); + } + template static void dispatchResetHash(NodeTy *N) { + if constexpr (HasCachedHash::value) + N->setHash(0); + } /// Merge branch weights from two direct callsites. static MDNode *mergeDirectCallProfMetadata(MDNode *A, MDNode *B, diff --git a/llvm/lib/IR/Metadata.cpp b/llvm/lib/IR/Metadata.cpp index fc78a5b299f49..1e2e3e39994d3 100644 --- a/llvm/lib/IR/Metadata.cpp +++ b/llvm/lib/IR/Metadata.cpp @@ -1007,8 +1007,7 @@ MDNode *MDNode::uniquify() { #define HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) \ case CLASS##Kind: { \ CLASS *SubclassThis = cast(this); \ - std::bool_constant::value> ShouldRecalculateHash; \ - dispatchRecalculateHash(SubclassThis, ShouldRecalculateHash); \ + dispatchRecalculateHash(SubclassThis); \ return uniquifyImpl(SubclassThis, getContext().pImpl->CLASS##s); \ } #include "llvm/IR/Metadata.def" @@ -1064,8 +1063,7 @@ void MDNode::storeDistinctInContext() { llvm_unreachable("Invalid subclass of MDNode"); #define HANDLE_MDNODE_LEAF(CLASS) \ case CLASS##Kind: { \ - std::bool_constant::value> ShouldResetHash; \ - dispatchResetHash(cast(this), ShouldResetHash); \ + dispatchResetHash(cast(this)); \ break; \ } #include "llvm/IR/Metadata.def"