@@ -169,8 +169,7 @@ class LLT {
169
169
// / vector types.
170
170
constexpr bool isScalable () const {
171
171
assert (isVector () && " Expected a vector type" );
172
- return IsPointer ? getFieldValue (PointerVectorScalableFieldInfo)
173
- : getFieldValue (VectorScalableFieldInfo);
172
+ return getFieldValue (VectorScalableFieldInfo);
174
173
}
175
174
176
175
// / Returns true if the LLT is a fixed vector. Returns false otherwise, even
@@ -183,9 +182,7 @@ class LLT {
183
182
184
183
constexpr ElementCount getElementCount () const {
185
184
assert (IsVector && " cannot get number of elements on scalar/aggregate" );
186
- return ElementCount::get (IsPointer
187
- ? getFieldValue (PointerVectorElementsFieldInfo)
188
- : getFieldValue (VectorElementsFieldInfo),
185
+ return ElementCount::get (getFieldValue (VectorElementsFieldInfo),
189
186
isScalable ());
190
187
}
191
188
@@ -265,25 +262,15 @@ class LLT {
265
262
}
266
263
267
264
constexpr unsigned getScalarSizeInBits () const {
268
- if (IsScalar)
269
- return getFieldValue (ScalarSizeFieldInfo);
270
- if (IsVector) {
271
- if (!IsPointer)
272
- return getFieldValue (VectorSizeFieldInfo);
273
- else
274
- return getFieldValue (PointerVectorSizeFieldInfo);
275
- }
276
- assert (IsPointer && " unexpected LLT" );
277
- return getFieldValue (PointerSizeFieldInfo);
265
+ if (isPointerOrPointerVector ())
266
+ return getFieldValue (PointerSizeFieldInfo);
267
+ return getFieldValue (ScalarSizeFieldInfo);
278
268
}
279
269
280
270
constexpr unsigned getAddressSpace () const {
281
- assert (RawData != 0 && " Invalid Type" );
282
- assert (IsPointer && " cannot get address space of non-pointer type" );
283
- if (!IsVector)
284
- return getFieldValue (PointerAddressSpaceFieldInfo);
285
- else
286
- return getFieldValue (PointerVectorAddressSpaceFieldInfo);
271
+ assert (isPointerOrPointerVector () &&
272
+ " cannot get address space of non-pointer type" );
273
+ return getFieldValue (PointerAddressSpaceFieldInfo);
287
274
}
288
275
289
276
// / Returns the vector's element type. Only valid for vector types.
@@ -352,44 +339,23 @@ class LLT {
352
339
// / valid encodings, SizeInBits/SizeOfElement must be larger than 0.
353
340
// / * Non-pointer scalar (isPointer == 0 && isVector == 0):
354
341
// / SizeInBits: 32;
355
- static const constexpr BitFieldInfo ScalarSizeFieldInfo{32 , 0 };
342
+ static const constexpr BitFieldInfo ScalarSizeFieldInfo{32 , 29 };
356
343
// / * Pointer (isPointer == 1 && isVector == 0):
357
344
// / SizeInBits: 16;
358
345
// / AddressSpace: 24;
359
- static const constexpr BitFieldInfo PointerSizeFieldInfo{16 , 0 };
360
- static const constexpr BitFieldInfo PointerAddressSpaceFieldInfo{
361
- 24 , PointerSizeFieldInfo[0 ] + PointerSizeFieldInfo[1 ]};
362
- static_assert ((PointerAddressSpaceFieldInfo[0 ] +
363
- PointerAddressSpaceFieldInfo[1 ]) <= 61 ,
364
- " Insufficient bits to encode all data" );
346
+ static const constexpr BitFieldInfo PointerSizeFieldInfo{16 , 45 };
347
+ static const constexpr BitFieldInfo PointerAddressSpaceFieldInfo{24 , 21 };
365
348
// / * Vector-of-non-pointer (isPointer == 0 && isVector == 1):
366
349
// / NumElements: 16;
367
350
// / SizeOfElement: 32;
368
351
// / Scalable: 1;
369
- static const constexpr BitFieldInfo VectorElementsFieldInfo{16 , 0 };
370
- static const constexpr BitFieldInfo VectorSizeFieldInfo{
371
- 32 , VectorElementsFieldInfo[0 ] + VectorElementsFieldInfo[1 ]};
372
- static const constexpr BitFieldInfo VectorScalableFieldInfo{
373
- 1 , VectorSizeFieldInfo[0 ] + VectorSizeFieldInfo[1 ]};
374
- static_assert ((VectorSizeFieldInfo[0 ] + VectorSizeFieldInfo[1 ]) <= 61 ,
375
- " Insufficient bits to encode all data" );
352
+ static const constexpr BitFieldInfo VectorElementsFieldInfo{16 , 5 };
353
+ static const constexpr BitFieldInfo VectorScalableFieldInfo{1 , 0 };
376
354
// / * Vector-of-pointer (isPointer == 1 && isVector == 1):
377
355
// / NumElements: 16;
378
356
// / SizeOfElement: 16;
379
357
// / AddressSpace: 24;
380
358
// / Scalable: 1;
381
- static const constexpr BitFieldInfo PointerVectorElementsFieldInfo{16 , 0 };
382
- static const constexpr BitFieldInfo PointerVectorSizeFieldInfo{
383
- 16 ,
384
- PointerVectorElementsFieldInfo[1 ] + PointerVectorElementsFieldInfo[0 ]};
385
- static const constexpr BitFieldInfo PointerVectorAddressSpaceFieldInfo{
386
- 24 , PointerVectorSizeFieldInfo[1 ] + PointerVectorSizeFieldInfo[0 ]};
387
- static const constexpr BitFieldInfo PointerVectorScalableFieldInfo{
388
- 1 , PointerVectorAddressSpaceFieldInfo[0 ] +
389
- PointerVectorAddressSpaceFieldInfo[1 ]};
390
- static_assert ((PointerVectorAddressSpaceFieldInfo[0 ] +
391
- PointerVectorAddressSpaceFieldInfo[1 ]) <= 61 ,
392
- " Insufficient bits to encode all data" );
393
359
394
360
uint64_t IsScalar : 1 ;
395
361
uint64_t IsPointer : 1 ;
@@ -422,28 +388,16 @@ class LLT {
422
388
this ->IsPointer = IsPointer;
423
389
this ->IsVector = IsVector;
424
390
this ->IsScalar = IsScalar;
425
- if (IsScalar)
426
- RawData = maskAndShift (SizeInBits, ScalarSizeFieldInfo);
427
- else if (IsVector) {
428
- assert (EC.isVector () && " invalid number of vector elements" );
429
- if (!IsPointer)
430
- RawData =
431
- maskAndShift (EC.getKnownMinValue (), VectorElementsFieldInfo) |
432
- maskAndShift (SizeInBits, VectorSizeFieldInfo) |
433
- maskAndShift (EC.isScalable () ? 1 : 0 , VectorScalableFieldInfo);
434
- else
435
- RawData =
436
- maskAndShift (EC.getKnownMinValue (),
437
- PointerVectorElementsFieldInfo) |
438
- maskAndShift (SizeInBits, PointerVectorSizeFieldInfo) |
439
- maskAndShift (AddressSpace, PointerVectorAddressSpaceFieldInfo) |
440
- maskAndShift (EC.isScalable () ? 1 : 0 ,
441
- PointerVectorScalableFieldInfo);
442
- } else if (IsPointer)
391
+ if (IsPointer) {
443
392
RawData = maskAndShift (SizeInBits, PointerSizeFieldInfo) |
444
393
maskAndShift (AddressSpace, PointerAddressSpaceFieldInfo);
445
- else
446
- llvm_unreachable (" unexpected LLT configuration" );
394
+ } else {
395
+ RawData = maskAndShift (SizeInBits, ScalarSizeFieldInfo);
396
+ }
397
+ if (IsVector) {
398
+ RawData |= maskAndShift (EC.getKnownMinValue (), VectorElementsFieldInfo) |
399
+ maskAndShift (EC.isScalable () ? 1 : 0 , VectorScalableFieldInfo);
400
+ }
447
401
}
448
402
449
403
public:
0 commit comments