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.