13#ifndef LLVM_EXECUTIONENGINE_ORC_SHARED_EXECUTORSYMBOLDEF_H
14#define LLVM_EXECUTIONENGINE_ORC_SHARED_EXECUTORSYMBOLDEF_H
28 template <
typename T,
typename UnwrapFn = ExecutorAddr::defaultUnwrap<T>>
31 UnwrapFn &&Unwrap = UnwrapFn()) {
32 auto *UP = Unwrap(
Ptr);
34 if (std::is_function_v<T>)
42 template <
typename T,
typename WrapFn =
44 std::enable_if_t<std::is_pointer<T>::value,
T>
45 toPtr(WrapFn &&Wrap = WrapFn())
const {
46 return Addr.
toPtr<
T>(std::forward<WrapFn>(Wrap));
51 template <
typename T,
typename WrapFn = ExecutorAddr::defaultWrap<T>>
52 std::enable_if_t<std::is_function<T>::value,
T *>
53 toPtr(WrapFn &&Wrap = WrapFn())
const {
54 return Addr.
toPtr<
T>(std::forward<WrapFn>(Wrap));
69 return LHS.getAddress() ==
RHS.getAddress() &&
70 LHS.getFlags() ==
RHS.getFlags();
94 return FlagsArgList::size(
F.getRawFlagsValue(),
F.getTargetFlags());
98 return FlagsArgList::serialize(BOB,
F.getRawFlagsValue(),
105 if (!FlagsArgList::deserialize(BIB, RawFlags, TargetFlags))
132 if (!DefArgList::deserialize(BIB,
Addr, Flags))
Flags for symbols in the JIT.
Represents an address in the executor process.
static ExecutorAddr fromPtr(T *Ptr, UnwrapFn &&Unwrap=UnwrapFn())
Create an ExecutorAddr from the given pointer.
std::enable_if_t< std::is_pointer< T >::value, T > toPtr(WrapFn &&Wrap=WrapFn()) const
Cast this ExecutorAddr to a pointer of the given type.
Represents a defining location for a JIT symbol.
void setFlags(JITSymbolFlags Flags)
friend bool operator==(const ExecutorSymbolDef &LHS, const ExecutorSymbolDef &RHS)
friend bool operator!=(const ExecutorSymbolDef &LHS, const ExecutorSymbolDef &RHS)
std::enable_if_t< std::is_pointer< T >::value, T > toPtr(WrapFn &&Wrap=WrapFn()) const
Cast this ExecutorSymbolDef to a pointer of the given type.
static ExecutorSymbolDef fromPtr(T *Ptr, JITSymbolFlags BaseFlags=JITSymbolFlags(), UnwrapFn &&Unwrap=UnwrapFn())
Create an ExecutorSymbolDef from the given pointer.
ExecutorSymbolDef(ExecutorAddr Addr, JITSymbolFlags Flags)
ExecutorSymbolDef()=default
const JITSymbolFlags & getFlags() const
const ExecutorAddr & getAddress() const
std::enable_if_t< std::is_function< T >::value, T * > toPtr(WrapFn &&Wrap=WrapFn()) const
Cast this ExecutorSymbolDef to a pointer of the given function type.
A utility class for serializing to a blob from a variadic list.
Output char buffer with overflow check.
static bool deserialize(SPSInputBuffer &BIB, ExecutorSymbolDef &ESD)
static size_t size(const ExecutorSymbolDef &ESD)
static bool serialize(SPSOutputBuffer &BOB, const ExecutorSymbolDef &ESD)
static bool deserialize(SPSInputBuffer &BIB, JITSymbolFlags &F)
static bool serialize(SPSOutputBuffer &BOB, const JITSymbolFlags &F)
static size_t size(const JITSymbolFlags &F)
Specialize to describe how to serialize/deserialize to/from the given concrete type.
SPSArgList< SPSTagTs... > AsArgList
Convenience typedef of the corresponding arg list.
This is an optimization pass for GlobalISel generic memory operations.