[llvm] 5d98dc7 - [llvm][GenericUniformity] Hack around strict is_invocable() checks
Krzysztof Drewniak via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 18 11:56:47 PST 2023
Author: Krzysztof Drewniak
Date: 2023-01-18T19:56:42Z
New Revision: 5d98dc7124dcf1cc231b7fc67fb55b528a3e493d
URL: https://github.com/llvm/llvm-project/commit/5d98dc7124dcf1cc231b7fc67fb55b528a3e493d
DIFF: https://github.com/llvm/llvm-project/commit/5d98dc7124dcf1cc231b7fc67fb55b528a3e493d.diff
LOG: [llvm][GenericUniformity] Hack around strict is_invocable() checks
With recent (> 15, as far as I can tell, possibly > 16) clang, c++17,
and GNU's libstdc++ (versions 9 and 10 and maybe others), LLVM fails
to compile due to an is_invocable() check in unique_ptr::reset().
To resolve this issue, add a template argument to ImplDeleter to make
things work.
Differential Revision: https://reviews.llvm.org/D141865
Added:
Modified:
llvm/include/llvm/ADT/GenericUniformityImpl.h
llvm/include/llvm/ADT/GenericUniformityInfo.h
llvm/lib/Analysis/UniformityAnalysis.cpp
llvm/lib/CodeGen/MachineUniformityAnalysis.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/ADT/GenericUniformityImpl.h b/llvm/include/llvm/ADT/GenericUniformityImpl.h
index fd446fed086ea..06d9b417ebdee 100644
--- a/llvm/include/llvm/ADT/GenericUniformityImpl.h
+++ b/llvm/include/llvm/ADT/GenericUniformityImpl.h
@@ -467,9 +467,8 @@ template <typename ContextT> class GenericUniformityAnalysisImpl {
ConstValueRefT Val) const;
};
-template <typename ContextT>
-void GenericUniformityInfo<ContextT>::ImplDeleter::operator()(
- GenericUniformityAnalysisImpl<ContextT> *Impl) {
+template <typename ImplT>
+void GenericUniformityAnalysisImplDeleter<ImplT>::operator()(ImplT *Impl) {
delete Impl;
}
diff --git a/llvm/include/llvm/ADT/GenericUniformityInfo.h b/llvm/include/llvm/ADT/GenericUniformityInfo.h
index c4d8c8098dd22..24807bdc1c35f 100644
--- a/llvm/include/llvm/ADT/GenericUniformityInfo.h
+++ b/llvm/include/llvm/ADT/GenericUniformityInfo.h
@@ -24,6 +24,14 @@ namespace llvm {
class TargetTransformInfo;
template <typename ContextT> class GenericUniformityAnalysisImpl;
+template <typename ImplT> struct GenericUniformityAnalysisImplDeleter {
+ // Ugly hack around the fact that recent (> 15.0) clang will run into an
+ // is_invocable() check in some GNU libc++'s unique_ptr implementation
+ // and reject this deleter if you just make it callable with an ImplT *,
+ // whether or not the type of ImplT is spelled out.
+ using pointer = ImplT *;
+ void operator()(ImplT *Impl);
+};
template <typename ContextT> class GenericUniformityInfo {
public:
@@ -63,12 +71,9 @@ template <typename ContextT> class GenericUniformityInfo {
private:
using ImplT = GenericUniformityAnalysisImpl<ContextT>;
- struct ImplDeleter {
- void operator()(GenericUniformityAnalysisImpl<ContextT> *Impl);
- };
FunctionT *F;
- std::unique_ptr<ImplT, ImplDeleter> DA;
+ std::unique_ptr<ImplT, GenericUniformityAnalysisImplDeleter<ImplT>> DA;
GenericUniformityInfo(const GenericUniformityInfo &) = delete;
GenericUniformityInfo &operator=(const GenericUniformityInfo &) = delete;
diff --git a/llvm/lib/Analysis/UniformityAnalysis.cpp b/llvm/lib/Analysis/UniformityAnalysis.cpp
index 8194ac3ad7685..8ed5af8a8d1c8 100644
--- a/llvm/lib/Analysis/UniformityAnalysis.cpp
+++ b/llvm/lib/Analysis/UniformityAnalysis.cpp
@@ -87,6 +87,8 @@ bool llvm::GenericUniformityAnalysisImpl<SSAContext>::usesValueFromCycle(
// This ensures explicit instantiation of
// GenericUniformityAnalysisImpl::ImplDeleter::operator()
template class llvm::GenericUniformityInfo<SSAContext>;
+template struct llvm::GenericUniformityAnalysisImplDeleter<
+ llvm::GenericUniformityAnalysisImpl<SSAContext>>;
//===----------------------------------------------------------------------===//
// UniformityInfoAnalysis and related pass implementations
diff --git a/llvm/lib/CodeGen/MachineUniformityAnalysis.cpp b/llvm/lib/CodeGen/MachineUniformityAnalysis.cpp
index 269976244daa3..2fe5e40a58c25 100644
--- a/llvm/lib/CodeGen/MachineUniformityAnalysis.cpp
+++ b/llvm/lib/CodeGen/MachineUniformityAnalysis.cpp
@@ -113,6 +113,8 @@ bool llvm::GenericUniformityAnalysisImpl<MachineSSAContext>::usesValueFromCycle(
// This ensures explicit instantiation of
// GenericUniformityAnalysisImpl::ImplDeleter::operator()
template class llvm::GenericUniformityInfo<MachineSSAContext>;
+template struct llvm::GenericUniformityAnalysisImplDeleter<
+ llvm::GenericUniformityAnalysisImpl<MachineSSAContext>>;
MachineUniformityInfo
llvm::computeMachineUniformityInfo(MachineFunction &F,
More information about the llvm-commits
mailing list