LLVM: include/llvm/ExecutionEngine/Orc/Shared/ExecutorSymbolDef.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef LLVM_EXECUTIONENGINE_ORC_SHARED_EXECUTORSYMBOLDEF_H
14#define LLVM_EXECUTIONENGINE_ORC_SHARED_EXECUTORSYMBOLDEF_H
15
19
20namespace llvm {
21namespace orc {
22
23
25public:
26
27
28 template <typename T, typename UnwrapFn = ExecutorAddr::defaultUnwrap>
31 UnwrapFn &&Unwrap = UnwrapFn()) {
32 auto *UP = Unwrap(Ptr);
34 if (std::is_function_v)
37 Flags);
38 }
39
40
41
42 template <typename T, typename WrapFn =
44 std::enable_if_t<std::is_pointer::value, T>
45 toPtr(WrapFn &&Wrap = WrapFn()) const {
46 return Addr.toPtr<T>(std::forward(Wrap));
47 }
48
49
50
51 template <typename T, typename WrapFn = ExecutorAddr::defaultWrap>
52 std::enable_if_t<std::is_function::value, T *>
53 toPtr(WrapFn &&Wrap = WrapFn()) const {
54 return Addr.toPtr<T>(std::forward(Wrap));
55 }
56
59 : Addr(Addr), Flags(Flags) {}
60
62
64
66
69 return LHS.getAddress() == RHS.getAddress() &&
70 LHS.getFlags() == RHS.getFlags();
71 }
72
77
78private:
81};
82
83namespace shared {
84
87
88
91
92public:
94 return FlagsArgList::size(F.getRawFlagsValue(), F.getTargetFlags());
95 }
96
98 return FlagsArgList::serialize(BOB, F.getRawFlagsValue(),
99 F.getTargetFlags());
100 }
101
105 if (!FlagsArgList::deserialize(BIB, RawFlags, TargetFlags))
106 return false;
108 TargetFlags};
109 return true;
110 }
111};
112
114
115
116template <>
119
120public:
124
128
132 if (!DefArgList::deserialize(BIB, Addr, Flags))
133 return false;
135 return true;
136 }
137};
138
139}
140}
141}
142
143#endif
Flags for symbols in the JIT.
Represents an address in the executor process.
llvm::identity rawPtr
A wrap/unwrap function that leaves pointers unmodified.
rawPtr defaultWrap
Default wrap function to use on this host.
static ExecutorAddr fromPtr(T *Ptr, UnwrapFn &&Unwrap=UnwrapFn())
Create an ExecutorAddr from the given pointer.
Represents a defining location for a JIT symbol.
Definition ExecutorSymbolDef.h:24
void setFlags(JITSymbolFlags Flags)
Definition ExecutorSymbolDef.h:65
friend bool operator==(const ExecutorSymbolDef &LHS, const ExecutorSymbolDef &RHS)
Definition ExecutorSymbolDef.h:67
friend bool operator!=(const ExecutorSymbolDef &LHS, const ExecutorSymbolDef &RHS)
Definition ExecutorSymbolDef.h:73
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.
Definition ExecutorSymbolDef.h:45
static ExecutorSymbolDef fromPtr(T *Ptr, JITSymbolFlags BaseFlags=JITSymbolFlags(), UnwrapFn &&Unwrap=UnwrapFn())
Create an ExecutorSymbolDef from the given pointer.
Definition ExecutorSymbolDef.h:29
ExecutorSymbolDef(ExecutorAddr Addr, JITSymbolFlags Flags)
Definition ExecutorSymbolDef.h:58
ExecutorSymbolDef()=default
const JITSymbolFlags & getFlags() const
Definition ExecutorSymbolDef.h:63
const ExecutorAddr & getAddress() const
Definition ExecutorSymbolDef.h:61
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.
Definition ExecutorSymbolDef.h:53
This is an optimization pass for GlobalISel generic memory operations.