LLVM: include/llvm/Support/PointerLikeTypeTraits.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14#ifndef LLVM_SUPPORT_POINTERLIKETYPETRAITS_H

15#define LLVM_SUPPORT_POINTERLIKETYPETRAITS_H

16

19#include

20

21namespace llvm {

22

23

24

26

28

30 static const bool value = false;

31};

32

33

34template

37 static const bool value = true;

38};

39

43

45 static const bool value = true;

46};

47}

48

49

51 static inline void *getAsVoidPointer(T *P) { return P; }

52 static inline T *getFromVoidPointer(void *P) { return static_cast<T *>(P); }

53

55};

56

60

61

62

63

64

65

66

67

69};

70

71

74

76 return NonConst::getAsVoidPointer(P);

77 }

79 return NonConst::getFromVoidPointer(const_cast<void *>(P));

80 }

82};

83

84

87

89 return NonConst::getAsVoidPointer(const_cast<T *>(P));

90 }

92 return NonConst::getFromVoidPointer(const_cast<void *>(P));

93 }

95};

96

97

100 return reinterpret_cast<void *>(P);

101 }

103 return reinterpret_cast<uintptr_t>(P);

104 }

105

107};

108

109

110

111

112

113

114

115

116

117template <int Alignment, typename FunctionPointerT>

121 assert((reinterpret_cast<uintptr_t>(P) &

123 "Alignment not satisfied for an actual function pointer!");

124 return reinterpret_cast<void *>(P);

125 }

127 return reinterpret_cast<FunctionPointerT>(P);

128 }

129};

130

131

132

133

134

135

136

137

138template <typename ReturnT, typename... ParamTs>

141

142}

143

144#endif

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

This is an optimization pass for GlobalISel generic memory operations.

constexpr size_t ConstantLog2()

Compile time Log2.

Provide suitable custom traits struct for function pointers.

Definition PointerLikeTypeTraits.h:118

static constexpr int NumLowBitsAvailable

Definition PointerLikeTypeTraits.h:119

static FunctionPointerT getFromVoidPointer(void *P)

Definition PointerLikeTypeTraits.h:126

static void * getAsVoidPointer(FunctionPointerT P)

Definition PointerLikeTypeTraits.h:120

static constexpr int NumLowBitsAvailable

Definition PointerLikeTypeTraits.h:81

static const void * getAsVoidPointer(const T P)

Definition PointerLikeTypeTraits.h:75

static const T getFromVoidPointer(const void *P)

Definition PointerLikeTypeTraits.h:78

PointerLikeTypeTraits< T > NonConst

Definition PointerLikeTypeTraits.h:73

PointerLikeTypeTraits< T * > NonConst

Definition PointerLikeTypeTraits.h:86

static const T * getFromVoidPointer(const void *P)

Definition PointerLikeTypeTraits.h:91

static constexpr int NumLowBitsAvailable

Definition PointerLikeTypeTraits.h:94

static const void * getAsVoidPointer(const T *P)

Definition PointerLikeTypeTraits.h:88

static constexpr int NumLowBitsAvailable

Definition PointerLikeTypeTraits.h:106

static void * getAsVoidPointer(uintptr_t P)

Definition PointerLikeTypeTraits.h:99

static uintptr_t getFromVoidPointer(void *P)

Definition PointerLikeTypeTraits.h:102

static void * getFromVoidPointer(void *P)

Definition PointerLikeTypeTraits.h:59

static void * getAsVoidPointer(void *P)

Definition PointerLikeTypeTraits.h:58

static constexpr int NumLowBitsAvailable

Note, we assume here that void* is related to raw malloc'ed memory and that malloc returns objects at...

Definition PointerLikeTypeTraits.h:68

A traits type that is used to handle pointer types and things that are just wrappers for pointers as ...

Definition PointerLikeTypeTraits.h:25

static const bool value

Definition PointerLikeTypeTraits.h:37

static const bool value

Definition PointerLikeTypeTraits.h:30

static const bool value

Definition PointerLikeTypeTraits.h:45

static const bool value

Definition PointerLikeTypeTraits.h:41