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

85 TypeID ID : 8;

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