Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/DXIL.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3220,7 +3220,7 @@ INSTR.LINALGMATRIXNOTEXACTMATCH Matrix '%0' must exactly m
INSTR.LINALGMATRIXOUTPUTBIASVECMISMATCH Output vector element type '%0' must match Bias vector element type '%1'
INSTR.LINALGMATRIXREQUIRESRWBAB %0 requires RWByteAddressBuffer.
INSTR.LINALGMATRIXSCOPEMISMATCH Matrix Scope '%0' does not match expected scope %1.
INSTR.LINALGMATRIXSCOPENOTALLOWED Matrix Scope '%0' not allowed in %1 operation.
INSTR.LINALGMATRIXSCOPEMISMATCH2 Matrix Scope '%0' does not match expected scope %1 or %2.
INSTR.LINALGMATRIXSCOPEREQLAYOUT2 Matrix scope '%0' requires layout %1 or %2.
INSTR.LINALGMATRIXUNSIGNEDFLOATTYPENOTALLOWED Float-like type '%0' must be signed
INSTR.LINALGMATRIXUSEMISMATCH Matrix Use '%0' does not match expected use %1.
Expand Down
92 changes: 85 additions & 7 deletions lib/DxilValidation/DxilValidation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1089,11 +1089,41 @@ static void ValidateLinAlgMatrixLength(CallInst *CI,
static void ValidateLinAlgMatrixGetCoordinate(CallInst *CI,
ValidationContext &ValCtx) {
ValidateLinAlgOpParameters(CI, ValCtx);

DxilInst_LinAlgMatrixGetCoordinate Op(CI);
Comment thread
V-FEXrt marked this conversation as resolved.
Type *MatTy = Op.get_matrix()->getType();

assert(dxilutil::IsHLSLLinAlgMatrixType(MatTy) && "Must be LinAlg type");
auto MatIt = ValCtx.LinAlgTargetTypeMap.find(MatTy);
if (MatIt == ValCtx.LinAlgTargetTypeMap.end())
return;
LinAlgTargetType MatLATT = MatIt->second;

if (MatLATT.Scope != DXIL::MatrixScope::Wave &&
MatLATT.Scope != DXIL::MatrixScope::ThreadGroup)
ValCtx.EmitInstrFormatError(
CI, ValidationRule::InstrLinAlgMatrixScopeMismatch2,
{MatrixScopeToString(MatLATT.Scope), "Wave", "ThreadGroup"});
}

static void ValidateLinAlgMatrixGetElement(CallInst *CI,
ValidationContext &ValCtx) {
ValidateLinAlgOpParameters(CI, ValCtx);

DxilInst_LinAlgMatrixGetElement Op(CI);
Type *MatTy = Op.get_matrix()->getType();

assert(dxilutil::IsHLSLLinAlgMatrixType(MatTy) && "Must be LinAlg type");
auto MatIt = ValCtx.LinAlgTargetTypeMap.find(MatTy);
if (MatIt == ValCtx.LinAlgTargetTypeMap.end())
return;
LinAlgTargetType MatLATT = MatIt->second;

if (MatLATT.Scope != DXIL::MatrixScope::Wave &&
MatLATT.Scope != DXIL::MatrixScope::ThreadGroup)
ValCtx.EmitInstrFormatError(
CI, ValidationRule::InstrLinAlgMatrixScopeMismatch2,
{MatrixScopeToString(MatLATT.Scope), "Wave", "ThreadGroup"});
}

static void ValidateLinAlgMatrixStoreToDescriptor(CallInst *CI,
Expand Down Expand Up @@ -1315,6 +1345,20 @@ ValidateLinAlgVectorAccumulateToDescriptor(CallInst *CI,
static void ValidateLinAlgFillMatrix(CallInst *CI, ValidationContext &ValCtx) {
ValidateLinAlgOpReturnMatrix(CI, ValCtx);
ValidateLinAlgOpParameters(CI, ValCtx);

Type *RetMatTy = CI->getType();

assert(dxilutil::IsHLSLLinAlgMatrixType(RetMatTy) && "Must be LinAlg type");
auto RetMatIt = ValCtx.LinAlgTargetTypeMap.find(RetMatTy);
if (RetMatIt == ValCtx.LinAlgTargetTypeMap.end())
return;
LinAlgTargetType RetMatLATT = RetMatIt->second;

if (RetMatLATT.Scope != DXIL::MatrixScope::Wave &&
RetMatLATT.Scope != DXIL::MatrixScope::ThreadGroup)
ValCtx.EmitInstrFormatError(
CI, ValidationRule::InstrLinAlgMatrixScopeMismatch2,
{MatrixScopeToString(RetMatLATT.Scope), "Wave", "ThreadGroup"});
}

static void ValidateLinAlgMatrixLoadFromMemory(CallInst *CI,
Expand All @@ -1327,6 +1371,33 @@ static void ValidateLinAlgMatrixSetElement(CallInst *CI,
ValidationContext &ValCtx) {
ValidateLinAlgOpReturnMatrix(CI, ValCtx);
ValidateLinAlgOpParameters(CI, ValCtx);

DxilInst_LinAlgMatrixSetElement Op(CI);
Type *RetMatTy = CI->getType();
Type *InMatTy = Op.get_matrix()->getType();

assert(dxilutil::IsHLSLLinAlgMatrixType(InMatTy) &&
dxilutil::IsHLSLLinAlgMatrixType(RetMatTy) && "Must be LinAlg types");
auto InMatIt = ValCtx.LinAlgTargetTypeMap.find(InMatTy);
if (InMatIt == ValCtx.LinAlgTargetTypeMap.end())
return;
auto RetMatIt = ValCtx.LinAlgTargetTypeMap.find(RetMatTy);
if (RetMatIt == ValCtx.LinAlgTargetTypeMap.end())
return;
LinAlgTargetType InMatLATT = InMatIt->second;
LinAlgTargetType RetMatLATT = RetMatIt->second;

if (InMatLATT.Scope != DXIL::MatrixScope::Wave &&
InMatLATT.Scope != DXIL::MatrixScope::ThreadGroup)
ValCtx.EmitInstrFormatError(
CI, ValidationRule::InstrLinAlgMatrixScopeMismatch2,
{MatrixScopeToString(InMatLATT.Scope), "Wave", "ThreadGroup"});

if (RetMatLATT.Scope != DXIL::MatrixScope::Wave &&
RetMatLATT.Scope != DXIL::MatrixScope::ThreadGroup)
ValCtx.EmitInstrFormatError(
CI, ValidationRule::InstrLinAlgMatrixScopeMismatch2,
{MatrixScopeToString(RetMatLATT.Scope), "Wave", "ThreadGroup"});
}

static void ValidateLinAlgMatrixMultiply(CallInst *CI,
Expand Down Expand Up @@ -1464,10 +1535,11 @@ static void ValidateLinAlgMatrixAccumulate(CallInst *CI,
{MatrixScopeToString(RHSLATT.Scope),
MatrixScopeToString(RetLATT.Scope)});

if (RetLATT.Scope == DXIL::MatrixScope::Thread)
if (RetLATT.Scope != DXIL::MatrixScope::Wave &&
RetLATT.Scope != DXIL::MatrixScope::ThreadGroup)
ValCtx.EmitInstrFormatError(
CI, ValidationRule::InstrLinAlgMatrixScopeNotAllowed,
{"Thread", "LinAlgMatrixAccumulate"});
CI, ValidationRule::InstrLinAlgMatrixScopeMismatch2,
{MatrixScopeToString(RetLATT.Scope), "Wave", "ThreadGroup"});

if (RetLATT.M != RHSLATT.M || RetLATT.N != RHSLATT.N)
ValCtx.EmitInstrFormatError(
Expand Down Expand Up @@ -1505,11 +1577,17 @@ static void ValidateLinAlgCopyConvertMatrix(CallInst *CI,
LinAlgTargetType DstLATT = DstIt->second;
LinAlgTargetType SrcLATT = SrcIt->second;

if (DstLATT.Scope == DXIL::MatrixScope::Thread ||
SrcLATT.Scope == DXIL::MatrixScope::Thread)
if (DstLATT.Scope != DXIL::MatrixScope::Wave &&
DstLATT.Scope != DXIL::MatrixScope::ThreadGroup)
ValCtx.EmitInstrFormatError(
CI, ValidationRule::InstrLinAlgMatrixScopeMismatch2,
{MatrixScopeToString(DstLATT.Scope), "Wave", "ThreadGroup"});

if (SrcLATT.Scope != DXIL::MatrixScope::Wave &&
SrcLATT.Scope != DXIL::MatrixScope::ThreadGroup)
ValCtx.EmitInstrFormatError(
CI, ValidationRule::InstrLinAlgMatrixScopeNotAllowed,
{"Thread", "LinAlgCopyConvertMatrix"});
CI, ValidationRule::InstrLinAlgMatrixScopeMismatch2,
{MatrixScopeToString(SrcLATT.Scope), "Wave", "ThreadGroup"});

if (DstLATT.Scope != SrcLATT.Scope)
ValCtx.EmitInstrFormatError(CI,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,34 +11,38 @@ void main() {

// CHECK2: call void @"dx.hl.op..void (i32, %dx.types.LinAlgMatrixC4M5N4U1S2*, i32)"
// CHECK2-SAME: (i32 402, %dx.types.LinAlgMatrixC4M5N4U1S2* {{.*}}, i32 5),
// Matrix<I32, 5, 4, B, ThreadGroup>
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(4, 5, 4, 1, 2)]] mat1;
__builtin_LinAlg_FillMatrix(mat1, 5);

// CHECK: %{{.*}} = call %dx.types.LinAlgMatrixC5M3N4U0S0 @dx.op.linAlgFillMatrix.mC5M3N4U0S0.f32
// CHECK: %{{.*}} = call %dx.types.LinAlgMatrixC5M8N4U0S1 @dx.op.linAlgFillMatrix.mC5M8N4U0S1.f32
// CHECK-SAME: (i32 -2147483636, float {{.*}}) ; LinAlgFillMatrix(value)

// CHECK2: call void @"dx.hl.op..void (i32, %dx.types.LinAlgMatrixC5M3N4U0S0*, float)"
// CHECK2-SAME: (i32 402, %dx.types.LinAlgMatrixC5M3N4U0S0* {{.*}}, float 0x40091EB860000000)
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(5, 3, 4, 0, 0)]] mat2;
// CHECK2: call void @"dx.hl.op..void (i32, %dx.types.LinAlgMatrixC5M8N4U0S1*, float)"
// CHECK2-SAME: (i32 402, %dx.types.LinAlgMatrixC5M8N4U0S1* {{.*}}, float 0x40091EB860000000)
// Matrix<U32, 8, 4, A, Wave>
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(5, 8, 4, 0, 1)]] mat2;
__builtin_LinAlg_FillMatrix(mat2, 3.14);


// CHECK: %{{.*}} = call %dx.types.LinAlgMatrixC5M3N4U0S0 @dx.op.linAlgFillMatrix.mC5M3N4U0S0.f64
// CHECK: %{{.*}} = call %dx.types.LinAlgMatrixC5M8N4U0S2 @dx.op.linAlgFillMatrix.mC5M8N4U0S2.f64
// CHECK-SAME: (i32 -2147483636, double {{.*}}) ; LinAlgFillMatrix(value)

// CHECK2: call void @"dx.hl.op..void (i32, %dx.types.LinAlgMatrixC5M3N4U0S0*, double)"
// CHECK2-SAME: (i32 402, %dx.types.LinAlgMatrixC5M3N4U0S0* {{.*}}, double %{{.+}})
// CHECK2: call void @"dx.hl.op..void (i32, %dx.types.LinAlgMatrixC5M8N4U0S2*, double)"
// CHECK2-SAME: (i32 402, %dx.types.LinAlgMatrixC5M8N4U0S2* {{.*}}, double %{{.+}})
// Matrix<U32, 8, 4, A, ThreadGroup>
double dVal = 9.87;
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(5, 3, 4, 0, 0)]] mat3;
__builtin_LinAlg_FillMatrix(mat2, dVal);
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(5, 8, 4, 0, 2)]] mat3;
__builtin_LinAlg_FillMatrix(mat3, dVal);


// CHECK: %{{.*}} = call %dx.types.LinAlgMatrixC5M3N4U0S0 @dx.op.linAlgFillMatrix.mC5M3N4U0S0.i64
// CHECK: %{{.*}} = call %dx.types.LinAlgMatrixC5M4N4U1S1 @dx.op.linAlgFillMatrix.mC5M4N4U1S1.i64
// CHECK-SAME: (i32 -2147483636, i64 {{.*}}) ; LinAlgFillMatrix(value)

// CHECK2: call void @"dx.hl.op..void (i32, %dx.types.LinAlgMatrixC5M3N4U0S0*, i64)"
// CHECK2-SAME: (i32 402, %dx.types.LinAlgMatrixC5M3N4U0S0* {{.*}}, i64 %{{.+}})
// CHECK2: call void @"dx.hl.op..void (i32, %dx.types.LinAlgMatrixC5M4N4U1S1*, i64)"
// CHECK2-SAME: (i32 402, %dx.types.LinAlgMatrixC5M4N4U1S1* {{.*}}, i64 %{{.+}})
// Matrix<U32, 4, 4, B, Wave>
int64_t i64Val = 12345;
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(5, 3, 4, 0, 0)]] mat4;
__builtin_LinAlg_FillMatrix(mat2, i64Val);
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(5, 4, 4, 1, 1)]] mat4;
__builtin_LinAlg_FillMatrix(mat4, i64Val);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ RWByteAddressBuffer outbuf;
void main() {
// CHECK-LABEL: define void @main()

// CHECK: call void @dx.op.linAlgMatrixAccumulateToDescriptor.mC9M4N4U2S0(i32 -2147483621,
// CHECK-SAME: %dx.types.LinAlgMatrixC9M4N4U2S0 %{{.*}}, %dx.types.Handle %{{.*}}, i32 0, i32 0, i32 4, i32 128)
// CHECK: call void @dx.op.linAlgMatrixAccumulateToDescriptor.mC9M4N4U2S1(i32 -2147483621,
// CHECK-SAME: %dx.types.LinAlgMatrixC9M4N4U2S1 %{{.*}}, %dx.types.Handle %{{.*}}, i32 0, i32 0, i32 0, i32 128)
// CHECK-SAME: ; LinAlgMatrixAccumulateToDescriptor(matrix,handle,offset,stride,layout,align)

// CHECK2: call void @"dx.hl.op..void (i32, %dx.types.LinAlgMatrixC9M4N4U2S0, %dx.types.Handle, i32, i32, i32, i32)"
// CHECK2-SAME: (i32 415, %dx.types.LinAlgMatrixC9M4N4U2S0 %{{.*}}, %dx.types.Handle {{.*}}, i32 0, i32 0, i32 4, i32 128)
// CHECK2: call void @"dx.hl.op..void (i32, %dx.types.LinAlgMatrixC9M4N4U2S1, %dx.types.Handle, i32, i32, i32, i32)"
// CHECK2-SAME: (i32 415, %dx.types.LinAlgMatrixC9M4N4U2S1 %{{.*}}, %dx.types.Handle {{.*}}, i32 0, i32 0, i32 0, i32 128)

// Matrix<F16, 4, 4, Accumulator, Thread>
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(9, 4, 4, 2, 0)]] mat;
// Matrix<F16, 4, 4, Accumulator, Wave>
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(9, 4, 4, 2, 1)]] mat;
__builtin_LinAlg_FillMatrix(mat, 1);
__builtin_LinAlg_MatrixAccumulateToDescriptor(mat, outbuf, 0, 0, 4, 128);
__builtin_LinAlg_MatrixAccumulateToDescriptor(mat, outbuf, 0, 0, 0, 128);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@
// RUN: %dxc -T cs_6_10 -E main %s | FileCheck %s
// RUN: %dxc -T cs_6_10 -E main -fcgl %s | FileCheck %s --check-prefix=CHECK2

ByteAddressBuffer inbuf;

[numthreads(1,1,1)]
void main() {
// CHECK-LABEL: define void @main()

// Matrix<I32, 4, 4, A, Thread>
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(4, 4, 4, 0, 0)]] mat;
__builtin_LinAlg_FillMatrix(mat, 1);
__builtin_LinAlg_MatrixLoadFromDescriptor(mat, inbuf, 0, 0, 0, 128);
float4 vec = {1,2,3,4};
float4 result;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@
// RUN: %dxc -T cs_6_10 -E main %s | FileCheck %s
// RUN: %dxc -T cs_6_10 -E main -fcgl %s | FileCheck %s --check-prefix=CHECK2

ByteAddressBuffer inbuf;

[numthreads(1,1,1)]
void main() {
// CHECK-LABEL: define void @main()

// Matrix<U32, 4, 4, A, Thread>
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(5, 4, 4, 0, 0)]] mat1;
__builtin_LinAlg_FillMatrix(mat1, 1);
__builtin_LinAlg_MatrixLoadFromDescriptor(mat1, inbuf, 0, 0, 0, 128);
float4 vec = {1,2,3,4};
float4 result = 0;

Expand All @@ -21,8 +25,6 @@ void main() {

__builtin_LinAlg_MatrixVectorMultiplyAdd(result, mat1, true, vec, 9, result);

__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(5, 4, 4, 0, 0)]] mat2;
__builtin_LinAlg_FillMatrix(mat2, 2);
double4 vec2 = {1,2,3,4};
double4 result2 = 0;

Expand All @@ -35,10 +37,8 @@ void main() {
// CHECK2-SAME: i32, <4 x double>)"(i32 419, <4 x double>* %result2, %dx.types.LinAlgMatrixC5M4N4U0S0 %{{[0-9]+}},
// CHECK2-SAME: i1 true, <4 x double> %{{[0-9]+}}, i32 10, <4 x double> %{{[0-9]+}})

__builtin_LinAlg_MatrixVectorMultiplyAdd(result2, mat2, true, vec2, 10, result2);
__builtin_LinAlg_MatrixVectorMultiplyAdd(result2, mat1, true, vec2, 10, result2);

__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(5, 4, 4, 0, 0)]] mat3;
__builtin_LinAlg_FillMatrix(mat3, 3);
vector<int64_t, 4> vec3 = {1,2,3,4};
vector<int64_t, 4> result3 = 0;

Expand All @@ -51,10 +51,11 @@ void main() {
// CHECK2-SAME: i32, <4 x i64>)"(i32 419, <4 x i64>* %result3, %dx.types.LinAlgMatrixC5M4N4U0S0 %{{[0-9]+}},
// CHECK2-SAME: i1 true, <4 x i64> %{{[0-9]+}}, i32 6, <4 x i64> %{{[0-9]+}})

__builtin_LinAlg_MatrixVectorMultiplyAdd(result3, mat3, true, vec3, 6, result3);
__builtin_LinAlg_MatrixVectorMultiplyAdd(result3, mat1, true, vec3, 6, result3);

// Matrix<I32, 8, 8, A, Thread>
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(4, 8, 8, 0, 0)]] mat4;
__builtin_LinAlg_FillMatrix(mat4, 4);
__builtin_LinAlg_MatrixLoadFromDescriptor(mat4, inbuf, 0, 0, 0, 128);
vector<int8_t4_packed, 8> vec4 = 0;
vector<int8_t4_packed, 8> result4 = 0;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
// return values and arguments of LinAlgMatrix operations.

uint useMatrix1() {
// Matrix<ComponentType::I32, 4, 5, MatrixUse::A, MatrixScope::Thread> m;
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(4, 4, 5, 0, 0)]] mat1;
// Matrix<ComponentType::I32, 4, 5, MatrixUse::A, MatrixScope::ThreadGroup> m;
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(4, 4, 5, 0, 2)]] mat1;
// mat1 = Matrix::Splat(5);
__builtin_LinAlg_FillMatrix(mat1, 5);

// Matrix<ComponentType::U32, 8, 8, MatrixUse::A, MatrixScope::Thread> m;
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(5, 8, 8, 0, 0)]] mat2;
// Matrix<ComponentType::U32, 8, 8, MatrixUse::A, MatrixScope::ThreadGroup> m;
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(5, 8, 8, 0, 2)]] mat2;
// mat2 = Matrix::Splat(1);
__builtin_LinAlg_FillMatrix(mat2, 1);
// return mat2.Length();
Expand All @@ -38,6 +38,6 @@ void main() {
}

// CHECK: !dx.targetTypes = !{!{{[0-9]+}}, !{{[0-9]+}}}
// CHECK: !{{[0-9]+}} = !{%dx.types.LinAlgMatrixC4M4N5U0S0 undef, i32 4, i32 4, i32 5, i32 0, i32 0}
// CHECK: !{{[0-9]+}} = !{%dx.types.LinAlgMatrixC5M8N8U0S0 undef, i32 5, i32 8, i32 8, i32 0, i32 0}
// CHECK: !{{[0-9]+}} = !{%dx.types.LinAlgMatrixC4M4N5U0S2 undef, i32 4, i32 4, i32 5, i32 0, i32 2}
// CHECK: !{{[0-9]+}} = !{%dx.types.LinAlgMatrixC5M8N8U0S2 undef, i32 5, i32 8, i32 8, i32 0, i32 2}
// CHECK-NOT: !{%dx.types.LinAlgMatrixC10M2N2U1S1 undef, i32 10, i32 2, i32 2, i32 1, i32 1}
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ void useMatrix3();
#ifdef LIB1

uint useMatrix1() {
// Matrix<ComponentType::I32, 4, 5, MatrixUse::A, MatrixScope::Thread> m;
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(4, 4, 5, 0, 0)]] mat1;
// Matrix<ComponentType::I32, 4, 5, MatrixUse::A, MatrixScope::ThreadGroup> m;
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(4, 4, 5, 0, 2)]] mat1;
// mat1 = Matrix::Splat(5);
__builtin_LinAlg_FillMatrix(mat1, 5);
// return mat1.Length();
Expand Down Expand Up @@ -75,7 +75,7 @@ void CSMain3() {

// Target types in lib1
// LIB1: !dx.targetTypes = !{![[TT1:.*]], ![[TT2:.*]]}
// LIB1: ![[TT1]] = !{%dx.types.LinAlgMatrixC4M4N5U0S0 undef, i32 4, i32 4, i32 5, i32 0, i32 0}
// LIB1: ![[TT1]] = !{%dx.types.LinAlgMatrixC4M4N5U0S2 undef, i32 4, i32 4, i32 5, i32 0, i32 2}
// LIB1: ![[TT2]] = !{%dx.types.LinAlgMatrixC10M4N4U1S1 undef, i32 10, i32 4, i32 4, i32 1, i32 1}

// Target types in lib2
Expand All @@ -89,7 +89,7 @@ void CSMain3() {

// CSMain2 uses one type of matrix
// CSMAIN2: !dx.targetTypes = !{!{{[0-9]+}}}
// CSMAIN2: !{{[0-9]+}} = !{%dx.types.LinAlgMatrixC4M4N5U0S0 undef, i32 4, i32 4, i32 5, i32 0, i32 0}
// CSMAIN2: !{{[0-9]+}} = !{%dx.types.LinAlgMatrixC4M4N5U0S2 undef, i32 4, i32 4, i32 5, i32 0, i32 2}

// CSMain3 uses two types of matrices
// CSMAIN3: !dx.targetTypes = !{!{{[0-9]+}}, !{{[0-9]+}}}
Expand Down
Loading
Loading