LLVM: include/llvm/IR/Type.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef LLVM_IR_TYPE_H
15#define LLVM_IR_TYPE_H
16
23#include
24#include
25#include
26
27namespace llvm {
28
36
37
38
39
40
41
42
43
44
46public:
47
48
49
50
51
52
53
80
81private:
82
84
86 unsigned SubclassData : 24;
87
88
89
90protected:
92
94 : Context(C), ID(tid), SubclassData(0) {}
96
98
100 SubclassData = val;
101
103 }
104
105
107
108
109
110
111
112
114
115public:
116
117
118
119
120
121
123 bool NoDetails = false) const;
124
126
127
129
130
131
132
133
134
135
137
138
140
141
143
144
146
147
151
152
154
155
157
158
160
161
163
164
166
167
168
169
177 return true;
178 default:
179 return false;
180 }
181 }
182
183
188
189
190
191
192
196
198
199
201
202
204
205
207
208
211
212
213
217
218
219
223
224
226
227
229
230
232
233
235
236
238
239
241
242
244
245
247
248
249
253
254
256
257
259
260
262
263
265
266
268
269
271
272
276
277
279
280
281
282
283
285
286
287
289
290
291
293
294
295
300
301
302
303
307
308
309
310
312
315 return true;
316
317
320 return false;
321
322 return isSizedDerivedType(Visited);
323 }
324
325
326
327
328
329
330
331
332
333
334
335
336
337
339
340
341
342
344
345
346
347
349
350
351
355 return const_cast<Type *>(this);
356 }
357
358
359
360
362
368
370
377
378
379
380
385
386
388
389
390
391
392
393
394
395
397
401
405
407
412
414
415
416
417
419
420
421
423
424
425
427
428
430
431
432
433
434
435
436
438
439
440
441
462 int noOfBits = sizeof(ScalarTy) * CHAR_BIT;
463 if (std::is_integral::value) {
465 } else if (std::is_floating_point::value) {
466 switch (noOfBits) {
467 case 32:
469 case 64:
471 }
472 }
474 }
477
478
479
480
483
484
485
486
489
490private:
491
492
493
496};
497
498
500 T.print(OS);
501 return OS;
502}
503
504
510
511
513
514
515
517 return reinterpret_cast<Type**>(Tys);
518}
519
523
524}
525
526#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
#define DEFINE_ISA_CONVERSION_FUNCTIONS(ty, ref)
static unsigned getScalarSizeInBits(Type *Ty)
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Class to represent integer types.
This is an important class for using LLVM in a threaded context.
Class to represent pointers.
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
StringRef - Represent a constant reference to a string, i.e.
The instances of the Type class are immutable: once they are created, they are never changed.
Definition Type.h:45
static LLVM_ABI IntegerType * getInt64Ty(LLVMContext &C)
static LLVM_ABI Type * getX86_AMXTy(LLVMContext &C)
bool isIntOrIntVectorTy(unsigned BitWidth) const
Return true if this is an integer type or a vector of integer types of the given width.
Definition Type.h:250
LLVM_ABI bool isEmptyTy() const
Return true if this type is empty, that is, it has no elements or all of its elements are empty.
LLVM_ABI unsigned getIntegerBitWidth() const
LLVM_ABI Type * getStructElementType(unsigned N) const
static LLVM_ABI Type * getWasm_ExternrefTy(LLVMContext &C)
bool isVectorTy() const
True if this is an instance of VectorType.
Definition Type.h:273
bool isX86_FP80Ty() const
Return true if this is x86 long double.
Definition Type.h:159
static LLVM_ABI Type * getMetadataTy(LLVMContext &C)
bool isArrayTy() const
True if this is an instance of ArrayType.
Definition Type.h:264
static LLVM_ABI Type * getTokenTy(LLVMContext &C)
static LLVM_ABI IntegerType * getInt128Ty(LLVMContext &C)
static LLVM_ABI IntegerType * getInt32Ty(LLVMContext &C)
bool isLabelTy() const
Return true if this is 'label'.
Definition Type.h:228
bool isIntOrIntVectorTy() const
Return true if this is an integer type or a vector of integer types.
Definition Type.h:246
bool isPointerTy() const
True if this is an instance of PointerType.
Definition Type.h:267
Type * getArrayElementType() const
Definition Type.h:408
bool isFloatTy() const
Return true if this is 'float', a 32-bit IEEE fp type.
Definition Type.h:153
bool isBFloatTy() const
Return true if this is 'bfloat', a 16-bit bfloat type.
Definition Type.h:145
static LLVM_ABI Type * getPPC_FP128Ty(LLVMContext &C)
static LLVM_ABI Type * getFP128Ty(LLVMContext &C)
static LLVM_ABI Type * getLabelTy(LLVMContext &C)
LLVM_ABI StringRef getStructName() const
bool isTokenLikeTy() const
Returns true if this is 'token' or a token-like target type.s.
Type *const * subtype_iterator
Definition Type.h:361
LLVM_ABI unsigned getStructNumElements() const
LLVM_ABI unsigned getPointerAddressSpace() const
Get the address space of this pointer or pointer vector type.
LLVM_ABI uint64_t getArrayNumElements() const
TypeID
Definitions of all of the base types for the Type system.
Definition Type.h:54
@ X86_AMXTyID
AMX vectors (8192 bits, X86 specific)
Definition Type.h:66
@ FunctionTyID
Functions.
Definition Type.h:71
@ ArrayTyID
Arrays.
Definition Type.h:74
@ TypedPointerTyID
Typed pointer used by some GPU targets.
Definition Type.h:77
@ HalfTyID
16-bit floating point type
Definition Type.h:56
@ TargetExtTyID
Target extension type.
Definition Type.h:78
@ VoidTyID
type with no size
Definition Type.h:63
@ ScalableVectorTyID
Scalable SIMD vector type.
Definition Type.h:76
@ LabelTyID
Labels.
Definition Type.h:64
@ FloatTyID
32-bit floating point type
Definition Type.h:58
@ StructTyID
Structures.
Definition Type.h:73
@ IntegerTyID
Arbitrary bit width integers.
Definition Type.h:70
@ FixedVectorTyID
Fixed width SIMD vector type.
Definition Type.h:75
@ BFloatTyID
16-bit floating point type (7-bit significand)
Definition Type.h:57
@ DoubleTyID
64-bit floating point type
Definition Type.h:59
@ X86_FP80TyID
80-bit floating point type (X87)
Definition Type.h:60
@ PPC_FP128TyID
128-bit floating point type (two 64-bits, PowerPC)
Definition Type.h:62
@ MetadataTyID
Metadata.
Definition Type.h:65
@ TokenTyID
Tokens.
Definition Type.h:67
@ PointerTyID
Pointers.
Definition Type.h:72
@ FP128TyID
128-bit floating point type (112-bit significand)
Definition Type.h:61
ArrayRef< Type * > subtypes() const
Definition Type.h:365
bool isSingleValueType() const
Return true if the type is a valid type for a register in codegen.
Definition Type.h:296
LLVM_ABI bool canLosslesslyBitCastTo(Type *Ty) const
Return true if this type could be converted with a lossless BitCast to type 'Ty'.
unsigned getNumContainedTypes() const
Return the number of types in the derived type.
Definition Type.h:387
bool isPPC_FP128Ty() const
Return true if this is powerpc long double.
Definition Type.h:165
unsigned NumContainedTys
Keeps track of how many Type*'s there are in the ContainedTys list.
Definition Type.h:106
static LLVM_ABI Type * getVoidTy(LLVMContext &C)
bool isFP128Ty() const
Return true if this is 'fp128'.
Definition Type.h:162
LLVM_ABI LLVM_DEPRECATED("Use PointerType::get instead", "PointerType::get") PointerType *getPointerTo(unsigned AddrSpace=0) const
Return a pointer to the current type.
bool is16bitFPTy() const
Return true if this is a 16-bit float type.
Definition Type.h:148
LLVM_ABI bool isFirstClassType() const
Return true if the type is "first class", meaning it is a valid type for a Value.
LLVM_ABI StringRef getTargetExtName() const
static LLVM_ABI Type * getFloatingPointTy(LLVMContext &C, const fltSemantics &S)
static LLVM_ABI IntegerType * getInt8Ty(LLVMContext &C)
Type * getScalarType() const
If this is a vector type, return the element type, otherwise return 'this'.
Definition Type.h:352
bool isMultiUnitFPType() const
Returns true if this is a floating-point type that is an unevaluated sum of multiple floating-point u...
Definition Type.h:193
Type(LLVMContext &C, TypeID tid)
Definition Type.h:93
bool isStructTy() const
True if this is an instance of StructType.
Definition Type.h:261
LLVM_ABI bool isRISCVVectorTupleTy() const
LLVM_ABI TypeSize getPrimitiveSizeInBits() const LLVM_READONLY
Return the basic size of this type if it is a primitive type.
LLVM_ABI Type * getWithNewBitWidth(unsigned NewBitWidth) const
Given an integer or vector type, change the lane bitwidth to NewBitwidth, whilst keeping the old numb...
bool isTargetExtTy() const
Return true if this is a target extension type.
Definition Type.h:203
static LLVM_ABI IntegerType * getInt16Ty(LLVMContext &C)
bool isSized(SmallPtrSetImpl< Type * > *Visited=nullptr) const
Return true if it makes sense to take the size of this type.
Definition Type.h:311
static LLVM_ABI Type * getPrimitiveType(LLVMContext &C, TypeID IDNumber)
Return a type based on an identifier.
bool isAggregateType() const
Return true if the type is an aggregate type.
Definition Type.h:304
bool isHalfTy() const
Return true if this is 'half', a 16-bit IEEE fp type.
Definition Type.h:142
LLVM_ABI Type * getWithNewType(Type *EltTy) const
Given vector type, change the element type, whilst keeping the old number of elements.
LLVMContext & getContext() const
Return the LLVMContext in which this type was uniqued.
Definition Type.h:128
LLVM_ABI void dump() const
LLVM_ABI void print(raw_ostream &O, bool IsForDebug=false, bool NoDetails=false) const
Print the current type.
Type *const * ContainedTys
A pointer to the array of Types contained by this Type.
Definition Type.h:113
unsigned getSubclassData() const
Definition Type.h:97
std::reverse_iterator< subtype_iterator > subtype_reverse_iterator
Definition Type.h:369
LLVM_ABI bool isFunctionVarArg() const
bool isDoubleTy() const
Return true if this is 'double', a 64-bit IEEE fp type.
Definition Type.h:156
void setSubclassData(unsigned val)
Definition Type.h:99
static LLVM_ABI IntegerType * getInt1Ty(LLVMContext &C)
friend class LLVMContextImpl
Definition Type.h:91
bool isFloatingPointTy() const
Return true if this is one of the floating-point types.
Definition Type.h:184
bool isPtrOrPtrVectorTy() const
Return true if this is a pointer type or a vector of pointer types.
Definition Type.h:270
subtype_iterator subtype_begin() const
Definition Type.h:363
bool isX86_AMXTy() const
Return true if this is X86 AMX.
Definition Type.h:200
static Type * getScalarTy(LLVMContext &C)
Definition Type.h:461
bool isFunctionTy() const
True if this is an instance of FunctionType.
Definition Type.h:258
LLVM_ABI bool isScalableTy() const
bool isIntOrPtrTy() const
Return true if this is an integer type or a pointer type.
Definition Type.h:255
LLVM_ABI Type * getExtendedType() const
Given scalar/vector integer type, returns a type with elements twice as wide as in the original type.
bool isIntegerTy() const
True if this is an instance of IntegerType.
Definition Type.h:240
TypeID getTypeID() const
Return the type id for the type.
Definition Type.h:136
bool isTokenTy() const
Return true if this is 'token'.
Definition Type.h:234
LLVM_ABI Type * getFunctionParamType(unsigned i) const
subtype_reverse_iterator subtype_rend() const
Definition Type.h:374
static LLVM_ABI IntegerType * getIntNTy(LLVMContext &C, unsigned N)
static LLVM_ABI Type * getDoubleTy(LLVMContext &C)
static LLVM_ABI Type * getX86_FP80Ty(LLVMContext &C)
bool isFPOrFPVectorTy() const
Return true if this is a FP type or a vector of FP.
Definition Type.h:225
subtype_reverse_iterator subtype_rbegin() const
Definition Type.h:371
Type * getContainedType(unsigned i) const
This method is used to implement the type iterator (defined at the end of the file).
Definition Type.h:381
subtype_iterator subtype_end() const
Definition Type.h:364
static LLVM_ABI Type * getFloatTy(LLVMContext &C)
bool isIEEELikeFPTy() const
Return true if this is a well-behaved IEEE-like type, which has a IEEE compatible layout,...
Definition Type.h:170
LLVM_ABI int getFPMantissaWidth() const
Return the width of the mantissa of this type.
LLVM_ABI const fltSemantics & getFltSemantics() const
static LLVM_ABI Type * getWasm_FuncrefTy(LLVMContext &C)
static LLVM_ABI Type * getBFloatTy(LLVMContext &C)
static LLVM_ABI Type * getHalfTy(LLVMContext &C)
LLVM_ABI unsigned getFunctionNumParams() const
LLVM_ABI bool containsNonLocalTargetExtType() const
LLVM_ABI bool containsNonGlobalTargetExtType() const
bool isVoidTy() const
Return true if this is 'void'.
Definition Type.h:139
LLVM_ABI bool isScalableTargetExtTy() const
Return true if this is a target extension type with a scalable layout.
bool isMetadataTy() const
Return true if this is 'metadata'.
Definition Type.h:231
This class implements an extremely fast bulk output stream that can only output to a stream.
struct LLVMOpaqueType * LLVMTypeRef
Each value in the LLVM IR has a type, an LLVMTypeRef.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
@ C
The default llvm calling convention, compatible with C.
This is an optimization pass for GlobalISel generic memory operations.
Attribute unwrap(LLVMAttributeRef Attr)
ArrayRef(const T &OneElt) -> ArrayRef< T >
constexpr unsigned BitWidth
LLVMAttributeRef wrap(Attribute Attr)
static bool doit(const Type &Ty)
Definition Type.h:506