Skip to content

Commit 888d855

Browse files
MrSidimsigcbot
authored andcommitted
Add cooperative matrix type interpretation
This patch adds support for TF32 and BF16 types.
1 parent 6559ba2 commit 888d855

File tree

4 files changed

+185
-33
lines changed

4 files changed

+185
-33
lines changed

IGC/Compiler/Optimizer/OpenCLPasses/JointMatrixFuncsResolutionPass/JointMatrixFuncsResolutionPass.cpp

Lines changed: 49 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,9 @@ enum {
441441
MatrixCSignedComponentsKHR = 0x4,
442442
MatrixResultSignedComponentsKHR = 0x8,
443443
// Unused right now
444-
SaturatingAccumulationKHR = 0x10
444+
SaturatingAccumulationKHR = 0x10,
445+
MatrixAAndBTF32ComponentsINTEL = 0x20,
446+
MatrixAAndBBFloat16ComponentsINTEL = 0x40
445447
};
446448

447449
namespace IGC {
@@ -1402,7 +1404,8 @@ Instruction *JointMatrixFuncsResolutionPass::ResolveStore(CallInst *CI)
14021404
return newCall;
14031405
}
14041406

1405-
static PrecisionType getElementPrecison(const JointMatrixTypeDescription *desc, bool floatOp, bool isUnsigned) {
1407+
static PrecisionType getJointMatrixElementPrecison(
1408+
const JointMatrixTypeDescription *desc, bool floatOp, bool isUnsigned) {
14061409
const unsigned width = desc->bitWidth;
14071410
if (floatOp && width == 16) {
14081411
/* bf is passed as uint16_t, hf is using halfs */
@@ -1417,6 +1420,39 @@ static PrecisionType getElementPrecison(const JointMatrixTypeDescription *desc,
14171420
return PrecisionType::PRECISION_UNUSED;
14181421
}
14191422

1423+
static PrecisionType getCoopMatrixElementPrecison(
1424+
const JointMatrixTypeDescription *desc, unsigned OperandsMask, unsigned Use,
1425+
bool floatOp) {
1426+
const unsigned width = desc->bitWidth;
1427+
if (OperandsMask & MatrixAAndBBFloat16ComponentsINTEL) {
1428+
IGC_ASSERT_MESSAGE(floatOp && width == 16,
1429+
"Wrong OpCooperativeMatrixMulAddKHR ops for BFloat16");
1430+
return PrecisionType::BF16;
1431+
}
1432+
if (floatOp && width == 16) {
1433+
IGC_ASSERT_MESSAGE(!OperandsMask,
1434+
"Wrong OpCooperativeMatrixMulAddKHR ops for FP16");
1435+
/* bf is passed as uint16_t, hf is using halfs */
1436+
return desc->isFloating ? PrecisionType::FP16 : PrecisionType::BF16;
1437+
}
1438+
if (OperandsMask & MatrixAAndBTF32ComponentsINTEL ||
1439+
(floatOp && width == 32)) {
1440+
return PrecisionType::TF32;
1441+
}
1442+
if (!floatOp && width == 8) {
1443+
if (OperandsMask & MatrixASignedComponentsKHR &&
1444+
OperandsMask & MatrixBSignedComponentsKHR) {
1445+
return PrecisionType::S8;
1446+
} else if (OperandsMask & MatrixASignedComponentsKHR) {
1447+
return Use == UseMatrixA ? PrecisionType::S8 : PrecisionType::U8;
1448+
} else if (OperandsMask & MatrixBSignedComponentsKHR) {
1449+
return Use == UseMatrixB ? PrecisionType::S8 : PrecisionType::U8;
1450+
}
1451+
return PrecisionType::U8;
1452+
}
1453+
return PrecisionType::PRECISION_UNUSED;
1454+
}
1455+
14201456
static const char *getElementName(PrecisionType P) {
14211457
switch (P) {
14221458
case PrecisionType::FP16: return "fp16_";
@@ -1499,28 +1535,20 @@ Instruction *JointMatrixFuncsResolutionPass::ResolveMad(CallInst *CI, unsigned O
14991535

15001536
const bool floatMad = cDesc.isFloating;
15011537

1502-
// TODO: with Cooperative matrix extension and with further extend
1503-
// of a new version of Joint matrix extension we carry information of the
1504-
// type interpretation in MulAdd last masked parameter, so need to adjust
1505-
// getElementPrecison logic for the new versions
1538+
PrecisionType PA = PrecisionType::PRECISION_UNUSED;
1539+
PrecisionType PB = PrecisionType::PRECISION_UNUSED;
15061540
if (OperationType == CooperativeOp) {
1507-
OperationType = floatMad ? MadOpSS : MadOpUU;
15081541
const unsigned MulAddArgSize = CI->arg_size();
1509-
if (MulAddArgSize > 3) {
1510-
const auto OperandsMask =
1511-
cast<ConstantInt>(CI->getArgOperand(3))->getZExtValue();
1512-
if (OperandsMask & MatrixASignedComponentsKHR &&
1513-
OperandsMask & MatrixBSignedComponentsKHR) {
1514-
OperationType = MadOpSS;
1515-
} else if (OperandsMask & MatrixASignedComponentsKHR) {
1516-
OperationType = MadOpSU;
1517-
} else if (OperandsMask & MatrixBSignedComponentsKHR) {
1518-
OperationType = MadOpUS;
1519-
}
1520-
}
1542+
const auto OperandsMask = MulAddArgSize > 3
1543+
? cast<ConstantInt>(CI->getArgOperand(3))->getZExtValue() : 0;
1544+
PA = getCoopMatrixElementPrecison(&aDesc, OperandsMask, UseMatrixA, floatMad);
1545+
PB = getCoopMatrixElementPrecison(&bDesc, OperandsMask, UseMatrixB, floatMad);
1546+
} else {
1547+
PA = getJointMatrixElementPrecison(&aDesc, floatMad,
1548+
isOperandUnsigned(OperationType, 0));
1549+
PB = getJointMatrixElementPrecison(&bDesc, floatMad,
1550+
isOperandUnsigned(OperationType, 1));
15211551
}
1522-
PrecisionType PA = getElementPrecison(&aDesc, floatMad, isOperandUnsigned(OperationType, 0));
1523-
PrecisionType PB = getElementPrecison(&bDesc, floatMad, isOperandUnsigned(OperationType, 1));
15241552

15251553
IGC_ASSERT_MESSAGE(PA != PrecisionType::PRECISION_UNUSED, "Invalid matrix A element type.");
15261554
IGC_ASSERT_MESSAGE(PB != PrecisionType::PRECISION_UNUSED, "Invalid matrix B element type.");

IGC/Compiler/tests/JointMatrixFuncsResolutionPass/cooperative-mad-builtin-pvc.ll

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838

3939
define spir_kernel void @mad_builtin_signed(i8 addrspace(1)* %src, i64 %stride, i32 addrspace(1)* %dst) {
4040
%1 = call spir_func %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* @_Z26__spirv_CompositeConstructi(i32 0)
41-
%2 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructi(i8 1)
42-
%3 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructi(i8 -1)
41+
%2 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructc(i8 1)
42+
%3 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructc(i8 -1)
4343
%4 = call spir_func %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* @_Z34__spirv_CooperativeMatrixMulAddKHRPU3AS141__spirv_CooperativeMatrixKHR__char_3_16_16_0PU3AS142__spirv_CooperativeMatrixKHR__char_3_16_16_1PU3AS140__spirv_CooperativeMatrixKHR__int_3_16_16_2i(%spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* %2, %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* %3, %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* %1, i32 3)
4444
call spir_func void @_Z33__spirv_CooperativeMatrixStoreKHRPU3AS1iPU3AS140__spirv_CooperativeMatrixKHR__int_3_16_16_2ili(i32 addrspace(1)* %dst, %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* %4, i32 0, i64 %stride, i32 3)
4545
ret void
@@ -68,8 +68,8 @@ define spir_kernel void @mad_builtin_signed(i8 addrspace(1)* %src, i64 %stride,
6868

6969
define spir_kernel void @mad_builtin_unsigned(i8 addrspace(1)* %src, i64 %stride, i32 addrspace(1)* %dst) {
7070
%1 = call spir_func %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* @_Z26__spirv_CompositeConstructi(i32 0)
71-
%2 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructi(i8 1)
72-
%3 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructi(i8 -1)
71+
%2 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructc(i8 1)
72+
%3 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructc(i8 -1)
7373
%4 = call spir_func %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* @_Z34__spirv_CooperativeMatrixMulAddKHRPU3AS141__spirv_CooperativeMatrixKHR__char_3_16_16_0PU3AS142__spirv_CooperativeMatrixKHR__char_3_16_16_1PU3AS140__spirv_CooperativeMatrixKHR__int_3_16_16_2(%spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* %2, %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* %3, %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* %1)
7474
call spir_func void @_Z33__spirv_CooperativeMatrixStoreKHRPU3AS1iPU3AS140__spirv_CooperativeMatrixKHR__int_3_16_16_2ili(i32 addrspace(1)* %dst, %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* %4, i32 0, i64 %stride, i32 3)
7575
ret void
@@ -98,8 +98,8 @@ define spir_kernel void @mad_builtin_unsigned(i8 addrspace(1)* %src, i64 %stride
9898

9999
define spir_kernel void @mad_builtin_unsigned_2(i8 addrspace(1)* %src, i64 %stride, i32 addrspace(1)* %dst) {
100100
%1 = call spir_func %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* @_Z26__spirv_CompositeConstructi(i32 0)
101-
%2 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructi(i8 1)
102-
%3 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructi(i8 -1)
101+
%2 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructc(i8 1)
102+
%3 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructc(i8 -1)
103103
%4 = call spir_func %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* @_Z34__spirv_CooperativeMatrixMulAddKHRPU3AS141__spirv_CooperativeMatrixKHR__char_3_16_16_0PU3AS142__spirv_CooperativeMatrixKHR__char_3_16_16_1PU3AS140__spirv_CooperativeMatrixKHR__int_3_16_16_2i(%spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* %2, %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* %3, %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* %1, i32 0)
104104
call spir_func void @_Z33__spirv_CooperativeMatrixStoreKHRPU3AS1iPU3AS140__spirv_CooperativeMatrixKHR__int_3_16_16_2ili(i32 addrspace(1)* %dst, %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* %4, i32 0, i64 %stride, i32 3)
105105
ret void
@@ -128,8 +128,8 @@ define spir_kernel void @mad_builtin_unsigned_2(i8 addrspace(1)* %src, i64 %stri
128128

129129
define spir_kernel void @mad_builtin_unsigned_signed(i8 addrspace(1)* %src, i64 %stride, i32 addrspace(1)* %dst) {
130130
%1 = call spir_func %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* @_Z26__spirv_CompositeConstructi(i32 0)
131-
%2 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructi(i8 1)
132-
%3 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructi(i8 -1)
131+
%2 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructc(i8 1)
132+
%3 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructc(i8 -1)
133133
%4 = call spir_func %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* @_Z34__spirv_CooperativeMatrixMulAddKHRPU3AS141__spirv_CooperativeMatrixKHR__char_3_16_16_0PU3AS142__spirv_CooperativeMatrixKHR__char_3_16_16_1PU3AS140__spirv_CooperativeMatrixKHR__int_3_16_16_2i(%spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* %2, %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* %3, %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* %1, i32 2)
134134
call spir_func void @_Z33__spirv_CooperativeMatrixStoreKHRPU3AS1iPU3AS140__spirv_CooperativeMatrixKHR__int_3_16_16_2ili(i32 addrspace(1)* %dst, %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* %4, i32 0, i64 %stride, i32 3)
135135
ret void
@@ -158,18 +158,18 @@ define spir_kernel void @mad_builtin_unsigned_signed(i8 addrspace(1)* %src, i64
158158

159159
define spir_kernel void @mad_builtin_signed_unsigned(i8 addrspace(1)* %src, i64 %stride, i32 addrspace(1)* %dst) {
160160
%1 = call spir_func %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* @_Z26__spirv_CompositeConstructi(i32 0)
161-
%2 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructi(i8 1)
162-
%3 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructi(i8 -1)
161+
%2 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructc(i8 1)
162+
%3 = call spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructc(i8 -1)
163163
%4 = call spir_func %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* @_Z34__spirv_CooperativeMatrixMulAddKHRPU3AS141__spirv_CooperativeMatrixKHR__char_3_16_16_0PU3AS142__spirv_CooperativeMatrixKHR__char_3_16_16_1PU3AS140__spirv_CooperativeMatrixKHR__int_3_16_16_2i(%spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* %2, %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* %3, %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* %1, i32 1)
164164
call spir_func void @_Z33__spirv_CooperativeMatrixStoreKHRPU3AS1iPU3AS140__spirv_CooperativeMatrixKHR__int_3_16_16_2ili(i32 addrspace(1)* %dst, %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* %4, i32 0, i64 %stride, i32 3)
165165
ret void
166166
}
167167

168168
declare spir_func %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* @_Z26__spirv_CompositeConstructi(i32)
169169

170-
declare spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructi(i8)
170+
declare spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructc(i8)
171171

172-
declare spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructi(i8)
172+
declare spir_func %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructc(i8)
173173

174174
declare spir_func %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)* @_Z34__spirv_CooperativeMatrixMulAddKHRPU3AS141__spirv_CooperativeMatrixKHR__char_3_16_16_0PU3AS142__spirv_CooperativeMatrixKHR__char_3_16_16_1PU3AS140__spirv_CooperativeMatrixKHR__int_3_16_16_2(%spirv.CooperativeMatrixKHR._char_3_16_16_0 addrspace(1)*, %spirv.CooperativeMatrixKHR._char_3_16_16_1 addrspace(1)*, %spirv.CooperativeMatrixKHR._int_3_16_16_2 addrspace(1)*)
175175

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
;=========================== begin_copyright_notice ============================
2+
;
3+
; Copyright (C) 2024 Intel Corporation
4+
;
5+
; SPDX-License-Identifier: MIT
6+
;
7+
;============================ end_copyright_notice =============================
8+
;
9+
; RUN: igc_opt %s -S -o - -igc-joint-matrix-resolution --platformpvc 2>&1 | FileCheck %s
10+
; ------------------------------------------------
11+
; JointMatrixFuncsResolutionPass
12+
; ------------------------------------------------
13+
14+
%spirv.CooperativeMatrixKHR._float_3_16_16_2 = type opaque
15+
%spirv.CooperativeMatrixKHR._short_3_16_16_0 = type opaque
16+
%spirv.CooperativeMatrixKHR._short_3_16_16_1 = type opaque
17+
18+
; CHECK-LABEL: @mad_builtin_bfloat16(
19+
; CHECK-NEXT: [[TMP1:%.*]] = alloca <16 x float>
20+
; CHECK-NEXT: [[TMP2:%.*]] = alloca <16 x i16>
21+
; CHECK-NEXT: [[TMP3:%.*]] = alloca <8 x i32>
22+
; CHECK-NEXT: [[TMP4:%.*]] = alloca <16 x float>
23+
; CHECK-NEXT: [[TMP5:%.*]] = alloca <16 x float>
24+
; CHECK-NEXT: store <16 x i16>{{.*}} <16 x i16>* [[TMP2]]
25+
; CHECK-NEXT: store <8 x i32>{{.*}} <8 x i32>* [[TMP3]]
26+
; CHECK-NEXT: store <16 x float> zeroinitializer, <16 x float>* [[TMP4]]
27+
; CHECK-NEXT: [[TMP6:%.*]] = bitcast <16 x i16>* [[TMP2]] to i8*
28+
; CHECK-NEXT: [[TMP7:%.*]] = bitcast <8 x i32>* [[TMP3]] to i8*
29+
; CHECK-NEXT: [[TMP8:%.*]] = bitcast <16 x float>* [[TMP4]] to i8*
30+
; CHECK-NEXT: [[TMP9:%.*]] = bitcast <16 x float>* [[TMP5]] to i8*
31+
; CHECK-NEXT: call void @__builtin_spriv_OpJointMatrixMadINTEL_16x16x16_bf16_bf16_fp32(i8* [[TMP6]], i8* [[TMP7]], i8* [[TMP8]], i8* [[TMP9]])
32+
; CHECK-NEXT: [[TMP10:%.*]] = load <16 x float>, <16 x float>* [[TMP5]]
33+
; CHECK-NEXT: store <16 x float> [[TMP10]], <16 x float>* [[TMP1]]
34+
; CHECK-NEXT: [[TMP11:%.*]] = bitcast <16 x float>* [[TMP1]] to i8*
35+
; CHECK-NEXT: call void @__builtin_spriv_OpJointMatrixStoreINTEL_Accumulator_RowMajor_SG16_16x16_i32_16_global_pi64_v8i8(float addrspace(1)* [[DST:%.*]], i8* [[TMP11]], i64 [[STRIDE:%.*]])
36+
; CHECK-NEXT: ret void
37+
; CHECK-NOT: error:
38+
39+
define spir_kernel void @mad_builtin_bfloat16(i8 addrspace(1)* %src, i64 %stride, float addrspace(1)* %dst) {
40+
%1 = call spir_func %spirv.CooperativeMatrixKHR._float_3_16_16_2 addrspace(1)* @_Z26__spirv_CompositeConstructf(float 0.0)
41+
%2 = call spir_func %spirv.CooperativeMatrixKHR._short_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructs(i16 1)
42+
%3 = call spir_func %spirv.CooperativeMatrixKHR._short_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructs(i16 -1)
43+
%4 = call spir_func %spirv.CooperativeMatrixKHR._float_3_16_16_2 addrspace(1)* @_Z34__spirv_CooperativeMatrixMulAddKHRPU3AS141__spirv_CooperativeMatrixKHR__short_3_16_16_0PU3AS142__spirv_CooperativeMatrixKHR__short_3_16_16_1PU3AS140__spirv_CooperativeMatrixKHR__float_3_16_16_2i(%spirv.CooperativeMatrixKHR._short_3_16_16_0 addrspace(1)* %2, %spirv.CooperativeMatrixKHR._short_3_16_16_1 addrspace(1)* %3, %spirv.CooperativeMatrixKHR._float_3_16_16_2 addrspace(1)* %1, i32 64)
44+
call spir_func void @_Z33__spirv_CooperativeMatrixStoreKHRPU3AS1iPU3AS140__spirv_CooperativeMatrixKHR__float_3_16_16_2ili(float addrspace(1)* %dst, %spirv.CooperativeMatrixKHR._float_3_16_16_2 addrspace(1)* %4, i32 0, i64 %stride, i32 3)
45+
ret void
46+
}
47+
48+
declare spir_func %spirv.CooperativeMatrixKHR._float_3_16_16_2 addrspace(1)* @_Z26__spirv_CompositeConstructf(float)
49+
50+
declare spir_func %spirv.CooperativeMatrixKHR._short_3_16_16_0 addrspace(1)* @_Z76__spirv_CompositeConstructs(i16)
51+
52+
declare spir_func %spirv.CooperativeMatrixKHR._short_3_16_16_1 addrspace(1)* @_Z80__spirv_CompositeConstructs(i16)
53+
54+
declare spir_func %spirv.CooperativeMatrixKHR._float_3_16_16_2 addrspace(1)* @_Z34__spirv_CooperativeMatrixMulAddKHRPU3AS141__spirv_CooperativeMatrixKHR__short_3_16_16_0PU3AS142__spirv_CooperativeMatrixKHR__short_3_16_16_1PU3AS140__spirv_CooperativeMatrixKHR__float_3_16_16_2i(%spirv.CooperativeMatrixKHR._short_3_16_16_0 addrspace(1)*, %spirv.CooperativeMatrixKHR._short_3_16_16_1 addrspace(1)*, %spirv.CooperativeMatrixKHR._float_3_16_16_2 addrspace(1)*, i32)
55+
56+
declare spir_func void @_Z33__spirv_CooperativeMatrixStoreKHRPU3AS1iPU3AS140__spirv_CooperativeMatrixKHR__float_3_16_16_2ili(float addrspace(1)*, %spirv.CooperativeMatrixKHR._float_3_16_16_2 addrspace(1)*, i32, i64, i32)
57+
58+
!igc.functions = !{!0}
59+
!0 = !{void (i8 addrspace(1)*, i64, float addrspace(1)*)* @mad_builtin_bfloat16, !1}
60+
!1 = !{!2, !3}
61+
!2 = !{!"function_type", i32 0}
62+
!3 = !{!"sub_group_size", i32 16}

0 commit comments

Comments
 (0)