@@ -530,30 +530,29 @@ LogicalResult TransposeLoadOp::verify() {
530
530
if (!hasWorkgroupMemorySpace (srcType.getMemorySpace ()))
531
531
return emitOpError (" source memory address space must be Workgroup" );
532
532
533
- // TODO: support 6-bit element type vectors.
534
533
auto transferType = dyn_cast<VectorType>(getType ());
535
534
if (!transferType)
536
535
return emitOpError (" destination type must be a vector type" );
537
- size_t transferSize =
538
- transferType.getNumElements () * transferType.getElementTypeBitWidth ();
536
+ size_t numElements = transferType.getNumElements ();
539
537
size_t elementTypeSize = srcType.getElementType ().getIntOrFloatBitWidth ();
540
538
541
- // ElementSize -> LoadSize
539
+ // ElementSize -> NumElements
542
540
const std::map<size_t , size_t > KValidLoadSizeMap = {
543
- {4 , 64 },
544
- {32 , 96 }, // 6-bit element loads use casted vector<3xi32>
545
- {8 , 64 },
546
- {16 , 64 },
541
+ {4 , 16 },
542
+ {32 , 3 }, // 6-bit element loads use casted vector<3xi32>
543
+ {8 , 8 },
544
+ {16 , 4 },
547
545
};
548
546
549
- auto validLoadSize = KValidLoadSizeMap.find (elementTypeSize);
550
- if (validLoadSize == KValidLoadSizeMap.end ()) {
547
+ auto validNumElems = KValidLoadSizeMap.find (elementTypeSize);
548
+ if (validNumElems == KValidLoadSizeMap.end ()) {
551
549
return emitOpError (" Unsupported element type size for transpose load: " )
552
550
<< elementTypeSize << " bits" ;
553
551
}
554
- if (transferSize != validLoadSize->second ) {
555
- return emitOpError (" Transferring type size must be " )
556
- << validLoadSize->second << " bits for element type size " ;
552
+ if (numElements != validNumElems->second ) {
553
+ return emitOpError (
554
+ " Transferring type size mismatch: expected num of elements: " )
555
+ << validNumElems->second ;
557
556
}
558
557
559
558
return success ();
0 commit comments