@@ -169,8 +169,7 @@ class LLT {
169169 // / vector types.
170170 constexpr bool isScalable () const {
171171 assert (isVector () && " Expected a vector type" );
172- return IsPointer ? getFieldValue (PointerVectorScalableFieldInfo)
173- : getFieldValue (VectorScalableFieldInfo);
172+ return getFieldValue (VectorScalableFieldInfo);
174173 }
175174
176175 // / Returns true if the LLT is a fixed vector. Returns false otherwise, even
@@ -183,9 +182,7 @@ class LLT {
183182
184183 constexpr ElementCount getElementCount () const {
185184 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),
189186 isScalable ());
190187 }
191188
@@ -265,25 +262,15 @@ class LLT {
265262 }
266263
267264 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);
278268 }
279269
280270 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);
287274 }
288275
289276 // / Returns the vector's element type. Only valid for vector types.
@@ -352,44 +339,23 @@ class LLT {
352339 // / valid encodings, SizeInBits/SizeOfElement must be larger than 0.
353340 // / * Non-pointer scalar (isPointer == 0 && isVector == 0):
354341 // / SizeInBits: 32;
355- static const constexpr BitFieldInfo ScalarSizeFieldInfo{32 , 0 };
342+ static const constexpr BitFieldInfo ScalarSizeFieldInfo{32 , 29 };
356343 // / * Pointer (isPointer == 1 && isVector == 0):
357344 // / SizeInBits: 16;
358345 // / 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 };
365348 // / * Vector-of-non-pointer (isPointer == 0 && isVector == 1):
366349 // / NumElements: 16;
367350 // / SizeOfElement: 32;
368351 // / 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 };
376354 // / * Vector-of-pointer (isPointer == 1 && isVector == 1):
377355 // / NumElements: 16;
378356 // / SizeOfElement: 16;
379357 // / AddressSpace: 24;
380358 // / 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" );
393359
394360 uint64_t IsScalar : 1 ;
395361 uint64_t IsPointer : 1 ;
@@ -422,28 +388,16 @@ class LLT {
422388 this ->IsPointer = IsPointer;
423389 this ->IsVector = IsVector;
424390 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) {
443392 RawData = maskAndShift (SizeInBits, PointerSizeFieldInfo) |
444393 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+ }
447401 }
448402
449403public:
0 commit comments