@@ -530,30 +530,29 @@ LogicalResult TransposeLoadOp::verify() {
530530 if (!hasWorkgroupMemorySpace (srcType.getMemorySpace ()))
531531 return emitOpError (" source memory address space must be Workgroup" );
532532
533- // TODO: support 6-bit element type vectors.
534533 auto transferType = dyn_cast<VectorType>(getType ());
535534 if (!transferType)
536535 return emitOpError (" destination type must be a vector type" );
537- size_t transferSize =
538- transferType.getNumElements () * transferType.getElementTypeBitWidth ();
536+ size_t numElements = transferType.getNumElements ();
539537 size_t elementTypeSize = srcType.getElementType ().getIntOrFloatBitWidth ();
540538
541- // ElementSize -> LoadSize
539+ // ElementSize -> NumElements
542540 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 },
547545 };
548546
549- auto validLoadSize = KValidLoadSizeMap.find (elementTypeSize);
550- if (validLoadSize == KValidLoadSizeMap.end ()) {
547+ auto validNumElems = KValidLoadSizeMap.find (elementTypeSize);
548+ if (validNumElems == KValidLoadSizeMap.end ()) {
551549 return emitOpError (" Unsupported element type size for transpose load: " )
552550 << elementTypeSize << " bits" ;
553551 }
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 ;
557556 }
558557
559558 return success ();
0 commit comments