1#ifndef PROTEUS_LAMBDA_INTERFACE_HPP
2#define PROTEUS_LAMBDA_INTERFACE_HPP
4#include <llvm/ADT/DenseMap.h>
5#include <llvm/ADT/StringRef.h>
6#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);
37#if PROTEUS_ENABLE_DEBUG
39 <<
"Operator " << Operator <<
"\n=> LambdaType to match " << LambdaType
42 for (
auto &[Key, Val] : JitVariableMap) {
48 const auto It = JitVariableMap.find(LambdaType);
49 if (It == JitVariableMap.end())
56 PendingJitVariables.emplace_back(RC);
63 const StringRef LambdaTypeRef{LambdaType};
65 <<
"=> RegisterLambda " << LambdaTypeRef <<
"\n");
68 if (!PendingJitVariables.empty()) {
69 JitVariableMap[LambdaTypeRef] = PendingJitVariables;
70 PendingJitVariables.clear();
75 return JitVariableMap[LambdaTypeRef];
78 bool empty() {
return JitVariableMap.empty(); }
82 SmallVector<RuntimeConstant> PendingJitVariables;
83 DenseMap<StringRef, SmallVector<RuntimeConstant>> JitVariableMap;
#define PROTEUS_DBG(x)
Definition Debug.h:7
Definition LambdaRegistry.hpp:19
void registerLambda(const char *LambdaType)
Definition LambdaRegistry.hpp:62
void pushJitVariable(RuntimeConstant &RC)
Definition LambdaRegistry.hpp:55
std::optional< DenseMap< StringRef, SmallVector< RuntimeConstant > >::iterator > matchJitVariableMap(StringRef FnName)
Definition LambdaRegistry.hpp:27
const SmallVector< RuntimeConstant > & getJitVariables(StringRef LambdaTypeRef)
Definition LambdaRegistry.hpp:74
static LambdaRegistry & instance()
Definition LambdaRegistry.hpp:21
bool empty()
Definition LambdaRegistry.hpp:78
static llvm::raw_ostream & logs(const std::string &Name)
Definition Logger.hpp:18
Definition JitEngine.cpp:20
Definition CompilerInterfaceTypes.h:30