@@ -123,36 +123,15 @@ enum class MatrixUse : uint32_t {
123
123
Unnecessary = 3
124
124
};
125
125
126
- // TODO: replace the following W/A with a better solution when we have it.
127
- // The following structure is used to represent the joint matrix type in the
128
- // LLVM IR. The structure has a pointer to a multidimensional array member which
129
- // makes the encoding of the matrix type information within the LLVM IR looks
130
- // like this:
131
- // %struct.__spirv_JointMatrixINTEL = type { [42 x [6 x [2 x [1 x float]]]]* }
132
- // Note that an array cannot be of zero size but MatrixLayout and Scope
133
- // parameters can; hence '+ 1' is added to the 3rd and 4th dimensions.
134
- // In general, representing a matrix type information like this is a bit odd
135
- // (especially for MatrixLayout and Scope parameters). But with the current
136
- // tools we have in Clang, this is the only way to preserve and communicate this
137
- // information to SPIRV translator.
138
- // The long term solution would be to introduce a matrix type in Clang and use
139
- // it instead of this member.
140
126
#if (SYCL_EXT_ONEAPI_MATRIX_VERSION > 1)
141
127
template <typename T, std::size_t R, std::size_t C, MatrixLayout L,
142
128
Scope::Flag S = Scope::Flag::Subgroup,
143
129
MatrixUse U = MatrixUse::Unnecessary>
144
- struct __spirv_JointMatrixINTEL {
145
- T (*Value)
146
- [R][C][static_cast <size_t >(L) + 1 ][static_cast <size_t >(S) + 1 ]
147
- [static_cast <size_t >(U) + 1 ];
148
- };
130
+ struct __spirv_JointMatrixINTEL ;
149
131
#else
150
132
template <typename T, std::size_t R, std::size_t C, MatrixLayout L,
151
133
Scope::Flag S = Scope::Flag::Subgroup>
152
- struct __spirv_JointMatrixINTEL {
153
- T (*Value)
154
- [R][C][static_cast <size_t >(L) + 1 ][static_cast <size_t >(S) + 1 ];
155
- };
134
+ struct __spirv_JointMatrixINTEL ;
156
135
#endif // SYCL_EXT_ONEAPI_MATRIX_VERSION
157
136
158
137
} // namespace __spv
0 commit comments