1#ifndef PROTEUS_LAMBDA_INTERFACE_H
2#define PROTEUS_LAMBDA_INTERFACE_H
10#include <llvm/ADT/DenseMap.h>
11#include <llvm/ADT/StringRef.h>
12#include <llvm/Demangle/Demangle.h>
26 std::optional<DenseMap<StringRef, SmallVector<RuntimeConstant>>::iterator>
28 std::string Operator = llvm::demangle(FnName.str());
29 std::size_t Sep = Operator.rfind(
"::operator()");
30 if (Sep == std::string::npos) {
32 <<
"... SKIP ::operator() not found\n");
36 StringRef LambdaType = StringRef{Operator}.slice(0, Sep);
39 <<
"Operator " << Operator <<
"\n=> LambdaType to match "
40 << LambdaType <<
"\n";
42 for (
auto &[Key, Val] : JitVariableMap) {
48 const auto It = JitVariableMap.find(LambdaType);
49 if (It == JitVariableMap.end())
56 Logger::logs(
"proteus") <<
"Dumping pending registry \n";
57 for (
const auto &[Key, Value] : PendingJitVariableMap) {
59 for (
const auto &V : Value) {
64 Logger::logs(
"proteus") <<
"Dumping finalized registry \n";
65 for (
const auto &[Key, Value] : JitVariableMap) {
67 for (
const auto &V : Value) {
75 assert(PendingJitVariableMap.contains(LambdaType) &&
76 "Lambda must be registered prior to register JIT variable!");
77 PendingJitVariableMap[LambdaType].emplace_back(RC);
81 const StringRef LambdaTypeRef{LambdaType};
83 <<
"=> RegisterLambda " << LambdaTypeRef <<
"\n");
87 if (!PendingJitVariableMap[LambdaTypeRef].
empty()) {
88 JitVariableMap[LambdaTypeRef] = PendingJitVariableMap[LambdaTypeRef];
89 PendingJitVariableMap[LambdaTypeRef].clear();
94 return JitVariableMap[LambdaTypeRef];
97 bool empty() {
return JitVariableMap.empty(); }
101 DenseMap<StringRef, SmallVector<RuntimeConstant>> JitVariableMap;
102 DenseMap<StringRef, SmallVector<RuntimeConstant>> PendingJitVariableMap;
#define PROTEUS_DBG(x)
Definition Debug.h:9
static Config & get()
Definition Config.h:334
Definition LambdaRegistry.h:19
void registerLambda(const char *LambdaType)
Definition LambdaRegistry.h:80
void setJitVariable(const char *LambdaType, RuntimeConstant &RC)
Definition LambdaRegistry.h:74
std::optional< DenseMap< StringRef, SmallVector< RuntimeConstant > >::iterator > matchJitVariableMap(StringRef FnName)
Definition LambdaRegistry.h:27
void dump()
Definition LambdaRegistry.h:55
const SmallVector< RuntimeConstant > & getJitVariables(StringRef LambdaTypeRef)
Definition LambdaRegistry.h:93
static LambdaRegistry & instance()
Definition LambdaRegistry.h:21
bool empty()
Definition LambdaRegistry.h:97
static llvm::raw_ostream & logs(const std::string &Name)
Definition Logger.h:19
Definition CompiledLibrary.h:7
Definition MemoryCache.h:26
Definition CompilerInterfaceTypes.h:72