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