@@ -984,25 +984,25 @@ static void ValidateLinAlgOpParameters(CallInst *CI,
984984 if (isa<UndefValue>(Arg))
985985 ValCtx.EmitInstrError (CI , ValidationRule::InstrNoReadingUninitialized);
986986
987- // If we have a LinAlg Matrix validate it
987+ // If we have a LinAlg Matrix, validate that we have correct metadata.
988988 if (!dxilutil::IsHLSLLinAlgMatrixType (Ty))
989989 continue ;
990-
991- // Metadata is malformed if we don't have metadata
992- if (ValCtx.TargetTypeMap .find (Ty) == ValCtx.TargetTypeMap .end ()) {
990+ if (ValCtx.LinAlgTargetTypeMap .find (Ty) ==
991+ ValCtx.LinAlgTargetTypeMap .end ()) {
993992 ValCtx.EmitInstrError (CI , ValidationRule::MetaWellFormed);
994993 continue ;
995994 }
996995 }
997996}
998997
999- static void ValidateLinAlgOpReturn (CallInst *CI , ValidationContext &ValCtx) {
998+ static void ValidateLinAlgOpReturnMatrix (CallInst *CI ,
999+ ValidationContext &ValCtx) {
10001000 Type *Ty = CI ->getType ();
10011001 assert (dxilutil::IsHLSLLinAlgMatrixType (Ty) && " CI must return a matrix" );
10021002
10031003 // Metadata is malformed if we don't have metadata
1004- auto it = ValCtx.TargetTypeMap .find (Ty);
1005- if (it == ValCtx.TargetTypeMap .end ()) {
1004+ auto it = ValCtx.LinAlgTargetTypeMap .find (Ty);
1005+ if (it == ValCtx.LinAlgTargetTypeMap .end ()) {
10061006 ValCtx.EmitInstrError (CI , ValidationRule::MetaWellFormed);
10071007 return ;
10081008 }
@@ -1012,9 +1012,11 @@ static void ValidateLinAlgOpReturn(CallInst *CI, ValidationContext &ValCtx) {
10121012 // Validate the K dim is in bounds. Which dim is K depends on use.
10131013 // This validation isn't applied to an accumulator matrix
10141014 if (LATT .Use != DXIL ::MatrixUse::Accumulator) {
1015- unsigned MinK = 4 ;
1015+ unsigned MinK = DXIL :: kLinAlgMatrixMinK ;
10161016 unsigned K = (LATT .Use == DXIL ::MatrixUse::A) ? LATT .N : LATT .M ;
1017- unsigned MaxK = (LATT .Scope == DXIL ::MatrixScope::ThreadGroup) ? 1024 : 128 ;
1017+ unsigned MaxK = (LATT .Scope == DXIL ::MatrixScope::ThreadGroup)
1018+ ? DXIL ::kLinAlgThreadGroupMatrixMaxK
1019+ : DXIL ::kLinAlgWaveThreadMatrixMaxK ;
10181020 if (K < MinK || K > MaxK)
10191021 ValCtx.EmitInstrFormatError (
10201022 CI , ValidationRule::InstrLinAlgIllegalKDim,
@@ -2250,7 +2252,7 @@ static void ValidateDxilOperationCallInProfile(CallInst *CI,
22502252 case DXIL ::OpCode::LinAlgMatrixAccumulate:
22512253 case DXIL ::OpCode::LinAlgMatrixMultiplyAccumulate:
22522254 case DXIL ::OpCode::LinAlgMatrixOuterProduct: {
2253- ValidateLinAlgOpReturn (CI , ValCtx);
2255+ ValidateLinAlgOpReturnMatrix (CI , ValCtx);
22542256 ValidateLinAlgOpParameters (CI , ValCtx);
22552257 break ;
22562258 }
0 commit comments