xref: /llvm-project/mlir/test/Dialect/SPIRV/IR/types.mlir (revision 6e90f13cc9bc9dbc5c2c248d95c6e18a5fb021b4)
1// RUN: mlir-opt -split-input-file -verify-diagnostics %s | FileCheck %s
2
3// TODO: Add more tests after switching to the generic parser.
4
5//===----------------------------------------------------------------------===//
6// ArrayType
7//===----------------------------------------------------------------------===//
8
9// CHECK: func private @scalar_array_type(!spirv.array<16 x f32>, !spirv.array<8 x i32>)
10func.func private @scalar_array_type(!spirv.array<16xf32>, !spirv.array<8 x i32>) -> ()
11
12// CHECK: func private @vector_array_type(!spirv.array<32 x vector<4xf32>>)
13func.func private @vector_array_type(!spirv.array< 32 x vector<4xf32> >) -> ()
14
15// CHECK: func private @array_type_stride(!spirv.array<4 x !spirv.array<4 x f32, stride=4>, stride=128>)
16func.func private @array_type_stride(!spirv.array< 4 x !spirv.array<4 x f32, stride=4>, stride = 128>) -> ()
17
18// -----
19
20// expected-error @+1 {{expected '<'}}
21func.func private @missing_left_angle_bracket(!spirv.array 4xf32>) -> ()
22
23// -----
24
25// expected-error @+1 {{expected single integer for array element count}}
26func.func private @missing_count(!spirv.array<f32>) -> ()
27
28// -----
29
30// expected-error @+1 {{expected 'x' in dimension list}}
31func.func private @missing_x(!spirv.array<4 f32>) -> ()
32
33// -----
34
35// expected-error @+1 {{expected non-function type}}
36func.func private @missing_element_type(!spirv.array<4x>) -> ()
37
38// -----
39
40// expected-error @+1 {{expected non-function type}}
41func.func private @cannot_parse_type(!spirv.array<4xblabla>) -> ()
42
43// -----
44
45// expected-error @+1 {{expected single integer for array element count}}
46func.func private @more_than_one_dim(!spirv.array<4x3xf32>) -> ()
47
48// -----
49
50// expected-error @+1 {{only 1-D vector allowed but found 'vector<4x3xf32>'}}
51func.func private @non_1D_vector(!spirv.array<4xvector<4x3xf32>>) -> ()
52
53// -----
54
55// expected-error @+1 {{cannot use 'tensor<4xf32>' to compose SPIR-V types}}
56func.func private @tensor_type(!spirv.array<4xtensor<4xf32>>) -> ()
57
58// -----
59
60// expected-error @+1 {{cannot use 'bf16' to compose SPIR-V types}}
61func.func private @bf16_type(!spirv.array<4xbf16>) -> ()
62
63// -----
64
65// expected-error @+1 {{only 1/8/16/32/64-bit integer type allowed but found 'i256'}}
66func.func private @i256_type(!spirv.array<4xi256>) -> ()
67
68// -----
69
70// expected-error @+1 {{cannot use 'index' to compose SPIR-V types}}
71func.func private @index_type(!spirv.array<4xindex>) -> ()
72
73// -----
74
75// expected-error @+1 {{cannot use '!llvm.struct<()>' to compose SPIR-V types}}
76func.func private @llvm_type(!spirv.array<4x!llvm.struct<()>>) -> ()
77
78// -----
79
80// expected-error @+1 {{ArrayStride must be greater than zero}}
81func.func private @array_type_zero_stride(!spirv.array<4xi32, stride=0>) -> ()
82
83// -----
84
85// expected-error @+1 {{expected array length greater than 0}}
86func.func private @array_type_zero_length(!spirv.array<0xf32>) -> ()
87
88// -----
89
90//===----------------------------------------------------------------------===//
91// PointerType
92//===----------------------------------------------------------------------===//
93
94// CHECK: @bool_ptr_type(!spirv.ptr<i1, Uniform>)
95func.func private @bool_ptr_type(!spirv.ptr<i1, Uniform>) -> ()
96
97// CHECK: @scalar_ptr_type(!spirv.ptr<f32, Uniform>)
98func.func private @scalar_ptr_type(!spirv.ptr<f32, Uniform>) -> ()
99
100// CHECK: @vector_ptr_type(!spirv.ptr<vector<4xi32>, PushConstant>)
101func.func private @vector_ptr_type(!spirv.ptr<vector<4xi32>,PushConstant>) -> ()
102
103// -----
104
105// expected-error @+1 {{expected '<'}}
106func.func private @missing_left_angle_bracket(!spirv.ptr f32, Uniform>) -> ()
107
108// -----
109
110// expected-error @+1 {{expected ','}}
111func.func private @missing_comma(!spirv.ptr<f32 Uniform>) -> ()
112
113// -----
114
115// expected-error @+1 {{expected non-function type}}
116func.func private @missing_pointee_type(!spirv.ptr<, Uniform>) -> ()
117
118// -----
119
120// expected-error @+1 {{unknown storage class: SomeStorageClass}}
121func.func private @unknown_storage_class(!spirv.ptr<f32, SomeStorageClass>) -> ()
122
123// -----
124
125//===----------------------------------------------------------------------===//
126// RuntimeArrayType
127//===----------------------------------------------------------------------===//
128
129// CHECK: func private @scalar_runtime_array_type(!spirv.rtarray<f32>, !spirv.rtarray<i32>)
130func.func private @scalar_runtime_array_type(!spirv.rtarray<f32>, !spirv.rtarray<i32>) -> ()
131
132// CHECK: func private @vector_runtime_array_type(!spirv.rtarray<vector<4xf32>>)
133func.func private @vector_runtime_array_type(!spirv.rtarray< vector<4xf32> >) -> ()
134
135// CHECK: func private @runtime_array_type_stride(!spirv.rtarray<f32, stride=4>)
136func.func private @runtime_array_type_stride(!spirv.rtarray<f32, stride=4>) -> ()
137
138// -----
139
140// expected-error @+1 {{expected '<'}}
141func.func private @missing_left_angle_bracket(!spirv.rtarray f32>) -> ()
142
143// -----
144
145// expected-error @+1 {{expected non-function type}}
146func.func private @missing_element_type(!spirv.rtarray<>) -> ()
147
148// -----
149
150// expected-error @+1 {{expected non-function type}}
151func.func private @redundant_count(!spirv.rtarray<4xf32>) -> ()
152
153// -----
154
155// expected-error @+1 {{ArrayStride must be greater than zero}}
156func.func private @runtime_array_type_zero_stride(!spirv.rtarray<i32, stride=0>) -> ()
157
158// -----
159
160//===----------------------------------------------------------------------===//
161// ImageType
162//===----------------------------------------------------------------------===//
163
164// CHECK: func private @image_parameters_1D(!spirv.image<f32, Dim1D, NoDepth, NonArrayed, SingleSampled, SamplerUnknown, Unknown>)
165func.func private @image_parameters_1D(!spirv.image<f32, Dim1D, NoDepth, NonArrayed, SingleSampled, SamplerUnknown, Unknown>) -> ()
166
167// -----
168
169// expected-error @+1 {{expected ','}}
170func.func private @image_parameters_one_element(!spirv.image<f32>) -> ()
171
172// -----
173
174// expected-error @+1 {{expected ','}}
175func.func private @image_parameters_two_elements(!spirv.image<f32, Dim1D>) -> ()
176
177// -----
178
179// expected-error @+1 {{expected ','}}
180func.func private @image_parameters_three_elements(!spirv.image<f32, Dim1D, NoDepth>) -> ()
181
182// -----
183
184// expected-error @+1 {{expected ','}}
185func.func private @image_parameters_four_elements(!spirv.image<f32, Dim1D, NoDepth, NonArrayed>) -> ()
186
187// -----
188
189// expected-error @+1 {{expected ','}}
190func.func private @image_parameters_five_elements(!spirv.image<f32, Dim1D, NoDepth, NonArrayed, SingleSampled>) -> ()
191
192// -----
193
194// expected-error @+1 {{expected ','}}
195func.func private @image_parameters_six_elements(!spirv.image<f32, Dim1D, NoDepth, NonArrayed, SingleSampled, SamplerUnknown>) -> ()
196
197// -----
198
199// expected-error @+1 {{expected '<'}}
200func.func private @image_parameters_delimiter(!spirv.image f32, Dim1D, NoDepth, NonArrayed, SingleSampled, SamplerUnknown, Unknown>) -> ()
201
202// -----
203
204// expected-error @+1 {{expected ','}}
205func.func private @image_parameters_nocomma_1(!spirv.image<f32, Dim1D NoDepth, NonArrayed, SingleSampled, SamplerUnknown, Unknown>) -> ()
206
207// -----
208
209// expected-error @+1 {{expected ','}}
210func.func private @image_parameters_nocomma_2(!spirv.image<f32, Dim1D, NoDepth NonArrayed, SingleSampled, SamplerUnknown, Unknown>) -> ()
211
212// -----
213
214// expected-error @+1 {{expected ','}}
215func.func private @image_parameters_nocomma_3(!spirv.image<f32, Dim1D, NoDepth, NonArrayed SingleSampled, SamplerUnknown, Unknown>) -> ()
216
217// -----
218
219// expected-error @+1 {{expected ','}}
220func.func private @image_parameters_nocomma_4(!spirv.image<f32, Dim1D, NoDepth, NonArrayed, SingleSampled SamplerUnknown, Unknown>) -> ()
221
222// -----
223
224// expected-error @+1 {{expected ','}}
225func.func private @image_parameters_nocomma_5(!spirv.image<f32, Dim1D, NoDepth, NonArrayed, SingleSampled, SamplerUnknown Unknown>) -> ()
226
227// -----
228
229//===----------------------------------------------------------------------===//
230// SampledImageType
231//===----------------------------------------------------------------------===//
232
233// CHECK: func private @sampled_image_type(!spirv.sampled_image<!spirv.image<f32, Dim1D, NoDepth, NonArrayed, SingleSampled, NoSampler, Unknown>>)
234func.func private @sampled_image_type(!spirv.sampled_image<!spirv.image<f32, Dim1D, NoDepth, NonArrayed, SingleSampled, NoSampler, Unknown>>) -> ()
235
236// -----
237
238// expected-error @+1 {{sampled image must be composed using image type, got 'f32'}}
239func.func private @samped_image_type_invaid_type(!spirv.sampled_image<f32>) -> ()
240
241// -----
242
243//===----------------------------------------------------------------------===//
244// StructType
245//===----------------------------------------------------------------------===//
246
247// CHECK: func private @struct_type(!spirv.struct<(f32)>)
248func.func private @struct_type(!spirv.struct<(f32)>) -> ()
249
250// CHECK: func private @struct_type2(!spirv.struct<(f32 [0])>)
251func.func private @struct_type2(!spirv.struct<(f32 [0])>) -> ()
252
253// CHECK: func private @struct_type_simple(!spirv.struct<(f32, !spirv.image<f32, Dim1D, NoDepth, NonArrayed, SingleSampled, SamplerUnknown, Unknown>)>)
254func.func private @struct_type_simple(!spirv.struct<(f32, !spirv.image<f32, Dim1D, NoDepth, NonArrayed, SingleSampled, SamplerUnknown, Unknown>)>) -> ()
255
256// CHECK: func private @struct_type_with_offset(!spirv.struct<(f32 [0], i32 [4])>)
257func.func private @struct_type_with_offset(!spirv.struct<(f32 [0], i32 [4])>) -> ()
258
259// CHECK: func private @nested_struct(!spirv.struct<(f32, !spirv.struct<(f32, i32)>)>)
260func.func private @nested_struct(!spirv.struct<(f32, !spirv.struct<(f32, i32)>)>)
261
262// CHECK: func private @nested_struct_with_offset(!spirv.struct<(f32 [0], !spirv.struct<(f32 [0], i32 [4])> [4])>)
263func.func private @nested_struct_with_offset(!spirv.struct<(f32 [0], !spirv.struct<(f32 [0], i32 [4])> [4])>)
264
265// CHECK: func private @struct_type_with_decoration(!spirv.struct<(f32 [NonWritable])>)
266func.func private @struct_type_with_decoration(!spirv.struct<(f32 [NonWritable])>)
267
268// CHECK: func private @struct_type_with_decoration_and_offset(!spirv.struct<(f32 [0, NonWritable])>)
269func.func private @struct_type_with_decoration_and_offset(!spirv.struct<(f32 [0, NonWritable])>)
270
271// CHECK: func private @struct_type_with_decoration2(!spirv.struct<(f32 [NonWritable], i32 [NonReadable])>)
272func.func private @struct_type_with_decoration2(!spirv.struct<(f32 [NonWritable], i32 [NonReadable])>)
273
274// CHECK: func private @struct_type_with_decoration3(!spirv.struct<(f32, i32 [NonReadable])>)
275func.func private @struct_type_with_decoration3(!spirv.struct<(f32, i32 [NonReadable])>)
276
277// CHECK: func private @struct_type_with_decoration4(!spirv.struct<(f32 [0], i32 [4, NonReadable])>)
278func.func private @struct_type_with_decoration4(!spirv.struct<(f32 [0], i32 [4, NonReadable])>)
279
280// CHECK: func private @struct_type_with_decoration5(!spirv.struct<(f32 [NonWritable, NonReadable])>)
281func.func private @struct_type_with_decoration5(!spirv.struct<(f32 [NonWritable, NonReadable])>)
282
283// CHECK: func private @struct_type_with_decoration6(!spirv.struct<(f32, !spirv.struct<(i32 [NonWritable, NonReadable])>)>)
284func.func private @struct_type_with_decoration6(!spirv.struct<(f32, !spirv.struct<(i32 [NonWritable, NonReadable])>)>)
285
286// CHECK: func private @struct_type_with_decoration7(!spirv.struct<(f32 [0], !spirv.struct<(i32, f32 [NonReadable])> [4])>)
287func.func private @struct_type_with_decoration7(!spirv.struct<(f32 [0], !spirv.struct<(i32, f32 [NonReadable])> [4])>)
288
289// CHECK: func private @struct_type_with_decoration8(!spirv.struct<(f32, !spirv.struct<(i32 [0], f32 [4, NonReadable])>)>)
290func.func private @struct_type_with_decoration8(!spirv.struct<(f32, !spirv.struct<(i32 [0], f32 [4, NonReadable])>)>)
291
292// CHECK: func private @struct_type_with_matrix_1(!spirv.struct<(!spirv.matrix<3 x vector<3xf32>> [0, ColMajor, MatrixStride=16])>)
293func.func private @struct_type_with_matrix_1(!spirv.struct<(!spirv.matrix<3 x vector<3xf32>> [0, ColMajor, MatrixStride=16])>)
294
295// CHECK: func private @struct_type_with_matrix_2(!spirv.struct<(!spirv.matrix<3 x vector<3xf32>> [0, RowMajor, MatrixStride=16])>)
296func.func private @struct_type_with_matrix_2(!spirv.struct<(!spirv.matrix<3 x vector<3xf32>> [0, RowMajor, MatrixStride=16])>)
297
298// CHECK: func private @struct_empty(!spirv.struct<()>)
299func.func private @struct_empty(!spirv.struct<()>)
300
301// -----
302
303// expected-error @+1 {{offset specification must be given for all members}}
304func.func private @struct_type_missing_offset1((!spirv.struct<(f32, i32 [4])>) -> ()
305
306// -----
307
308// expected-error @+1 {{offset specification must be given for all members}}
309func.func private @struct_type_missing_offset2(!spirv.struct<(f32 [3], i32)>) -> ()
310
311// -----
312
313// expected-error @+1 {{expected ')'}}
314func.func private @struct_type_missing_comma1(!spirv.struct<(f32 i32)>) -> ()
315
316// -----
317
318// expected-error @+1 {{expected ')'}}
319func.func private @struct_type_missing_comma2(!spirv.struct<(f32 [0] i32)>) -> ()
320
321// -----
322
323//  expected-error @+1 {{unbalanced '[' character in pretty dialect name}}
324func.func private @struct_type_neg_offset(!spirv.struct<(f32 [0)>) -> ()
325
326// -----
327
328//  expected-error @+1 {{unbalanced '(' character in pretty dialect name}}
329func.func private @struct_type_neg_offset(!spirv.struct<(f32 0])>) -> ()
330
331// -----
332
333//  expected-error @+1 {{expected ']'}}
334func.func private @struct_type_neg_offset(!spirv.struct<(f32 [NonWritable 0])>) -> ()
335
336// -----
337
338//  expected-error @+1 {{expected valid keyword}}
339func.func private @struct_type_neg_offset(!spirv.struct<(f32 [NonWritable, 0])>) -> ()
340
341// -----
342
343// expected-error @+1 {{expected ','}}
344func.func private @struct_type_missing_comma(!spirv.struct<(f32 [0 NonWritable], i32 [4])>)
345
346// -----
347
348// expected-error @+1 {{expected ']'}}
349func.func private @struct_type_missing_comma(!spirv.struct<(f32 [0, NonWritable NonReadable], i32 [4])>)
350
351// -----
352
353// expected-error @+1 {{expected ']'}}
354func.func private @struct_type_missing_comma(!spirv.struct<(!spirv.matrix<3 x vector<3xf32>> [0, RowMajor MatrixStride=16])>)
355
356// -----
357
358// expected-error @+1 {{expected integer value}}
359func.func private @struct_missing_member_decorator_value(!spirv.struct<(!spirv.matrix<3 x vector<3xf32>> [0, RowMajor, MatrixStride=])>)
360
361// -----
362
363//===----------------------------------------------------------------------===//
364// StructType (identified)
365//===----------------------------------------------------------------------===//
366
367// CHECK: func private @id_struct_empty(!spirv.struct<empty, ()>)
368func.func private @id_struct_empty(!spirv.struct<empty, ()>) -> ()
369
370// -----
371
372// CHECK: func private @id_struct_simple(!spirv.struct<simple, (f32)>)
373func.func private @id_struct_simple(!spirv.struct<simple, (f32)>) -> ()
374
375// -----
376
377// CHECK: func private @id_struct_multiple_elements(!spirv.struct<multi_elements, (f32, i32)>)
378func.func private @id_struct_multiple_elements(!spirv.struct<multi_elements, (f32, i32)>) -> ()
379
380// -----
381
382// CHECK: func private @id_struct_nested_literal(!spirv.struct<a1, (!spirv.struct<()>)>)
383func.func private @id_struct_nested_literal(!spirv.struct<a1, (!spirv.struct<()>)>) -> ()
384
385// -----
386
387// CHECK: func private @id_struct_nested_id(!spirv.struct<a2, (!spirv.struct<b2, ()>)>)
388func.func private @id_struct_nested_id(!spirv.struct<a2, (!spirv.struct<b2, ()>)>) -> ()
389
390// -----
391
392// CHECK: func private @literal_struct_nested_id(!spirv.struct<(!spirv.struct<a3, ()>)>)
393func.func private @literal_struct_nested_id(!spirv.struct<(!spirv.struct<a3, ()>)>) -> ()
394
395// -----
396
397// CHECK: func private @id_struct_self_recursive(!spirv.struct<a4, (!spirv.ptr<!spirv.struct<a4>, Uniform>)>)
398func.func private @id_struct_self_recursive(!spirv.struct<a4, (!spirv.ptr<!spirv.struct<a4>, Uniform>)>) -> ()
399
400// -----
401
402// CHECK: func private @id_struct_self_recursive2(!spirv.struct<a5, (i32, !spirv.ptr<!spirv.struct<a5>, Uniform>)>)
403func.func private @id_struct_self_recursive2(!spirv.struct<a5, (i32, !spirv.ptr<!spirv.struct<a5>, Uniform>)>) -> ()
404
405// -----
406
407// expected-error @+1 {{recursive struct reference not nested in struct definition}}
408func.func private @id_wrong_recursive_reference(!spirv.struct<a6>) -> ()
409
410// -----
411
412// expected-error @+1 {{recursive struct reference not nested in struct definition}}
413func.func private @id_struct_recursive_invalid(!spirv.struct<a7, (!spirv.ptr<!spirv.struct<b7>, Uniform>)>) -> ()
414
415// -----
416
417// expected-error @+1 {{identifier already used for an enclosing struct}}
418func.func private @id_struct_redefinition(!spirv.struct<a8, (!spirv.ptr<!spirv.struct<a8, (!spirv.ptr<!spirv.struct<a8>, Uniform>)>, Uniform>)>) -> ()
419
420// -----
421
422// Equivalent to:
423//   struct a { struct b *bPtr; };
424//   struct b { struct a *aPtr; };
425// CHECK: func private @id_struct_recursive(!spirv.struct<a9, (!spirv.ptr<!spirv.struct<b9, (!spirv.ptr<!spirv.struct<a9>, Uniform>)>, Uniform>)>)
426func.func private @id_struct_recursive(!spirv.struct<a9, (!spirv.ptr<!spirv.struct<b9, (!spirv.ptr<!spirv.struct<a9>, Uniform>)>, Uniform>)>) -> ()
427
428// -----
429
430// Equivalent to:
431//   struct a { struct b *bPtr; };
432//   struct b { struct a *aPtr, struct b *bPtr; };
433// CHECK: func private @id_struct_recursive(!spirv.struct<a10, (!spirv.ptr<!spirv.struct<b10, (!spirv.ptr<!spirv.struct<a10>, Uniform>, !spirv.ptr<!spirv.struct<b10>, Uniform>)>, Uniform>)>)
434func.func private @id_struct_recursive(!spirv.struct<a10, (!spirv.ptr<!spirv.struct<b10, (!spirv.ptr<!spirv.struct<a10>, Uniform>, !spirv.ptr<!spirv.struct<b10>, Uniform>)>, Uniform>)>) -> ()
435
436// -----
437
438//===----------------------------------------------------------------------===//
439// CooperativeMatrix (KHR)
440//===----------------------------------------------------------------------===//
441
442// CHECK-LABEL: func private @coop_matrix_types
443// CHECK-SAME:    !spirv.coopmatrix<8x16xi32, Subgroup, MatrixA>
444// CHECK-SAME:    !spirv.coopmatrix<8x8xf32, Workgroup, MatrixB>
445// CHECK-SAME:    !spirv.coopmatrix<4x8xf32, Workgroup, MatrixAcc>
446func.func private @coop_matrix_types(!spirv.coopmatrix<8x16xi32, Subgroup, MatrixA>,
447                                     !spirv.coopmatrix<8x8xf32, Workgroup, MatrixB>,
448                                     !spirv.coopmatrix<4x8xf32, Workgroup, MatrixAcc>) -> ()
449
450// -----
451
452// expected-error @+1 {{expected valid keyword}}
453func.func private @missing_scope(!spirv.coopmatrix<8x8xi32, >) -> ()
454
455// -----
456
457// expected-error @+1 {{expected ','}}
458func.func private @missing_use(!spirv.coopmatrix<8x16xi32, Subgroup>) -> ()
459
460// -----
461
462// expected-error @+1 {{expected valid keyword}}
463func.func private @missing_use2(!spirv.coopmatrix<8x8xi32, Subgroup,>) -> ()
464
465// -----
466
467// expected-error @+1 {{expected row and column count}}
468func.func private @missing_count(!spirv.coopmatrix<8xi32, Subgroup, MatrixA>) -> ()
469
470// -----
471
472// expected-error @+1 {{expected row and column count}}
473func.func private @too_many_dims(!spirv.coopmatrix<8x16x32xi32, Subgroup, MatrixB>) -> ()
474
475// -----
476
477// expected-error @+1 {{invalid use <id> attribute specification: Subgroup}}
478func.func private @use_not_integer(!spirv.coopmatrix<8x8xi32, Subgroup, Subgroup>) -> ()
479
480// -----
481
482//===----------------------------------------------------------------------===//
483// Matrix
484//===----------------------------------------------------------------------===//
485// CHECK: func private @matrix_type(!spirv.matrix<2 x vector<2xf16>>)
486func.func private @matrix_type(!spirv.matrix<2 x vector<2xf16>>) -> ()
487
488// -----
489
490// CHECK: func private @matrix_type(!spirv.matrix<3 x vector<3xf32>>)
491func.func private @matrix_type(!spirv.matrix<3 x vector<3xf32>>) -> ()
492
493// -----
494
495// CHECK: func private @matrix_type(!spirv.matrix<4 x vector<4xf16>>)
496func.func private @matrix_type(!spirv.matrix<4 x vector<4xf16>>) -> ()
497
498// -----
499
500// expected-error @+1 {{matrix is expected to have 2, 3, or 4 columns}}
501func.func private @matrix_invalid_size(!spirv.matrix<5 x vector<3xf32>>) -> ()
502
503// -----
504
505// expected-error @+1 {{matrix is expected to have 2, 3, or 4 columns}}
506func.func private @matrix_invalid_size(!spirv.matrix<1 x vector<3xf32>>) -> ()
507
508// -----
509
510// expected-error @+1 {{matrix columns size has to be less than or equal to 4 and greater than or equal 2, but found 5}}
511func.func private @matrix_invalid_columns_size(!spirv.matrix<3 x vector<5xf32>>) -> ()
512
513// -----
514
515// expected-error @+1 {{matrix columns size has to be less than or equal to 4 and greater than or equal 2, but found 1}}
516func.func private @matrix_invalid_columns_size(!spirv.matrix<3 x vector<1xf32>>) -> ()
517
518// -----
519
520// expected-error @+1 {{expected '<'}}
521func.func private @matrix_invalid_format(!spirv.matrix 3 x vector<3xf32>>) -> ()
522
523// -----
524
525// expected-error @+1 {{unbalanced '<' character in pretty dialect name}}
526func.func private @matrix_invalid_format(!spirv.matrix< 3 x vector<3xf32>) -> ()
527
528// -----
529
530// expected-error @+1 {{expected 'x' in dimension list}}
531func.func private @matrix_invalid_format(!spirv.matrix<2 vector<3xi32>>) -> ()
532
533// -----
534
535// expected-error @+1 {{matrix must be composed using vector type, got 'i32'}}
536func.func private @matrix_invalid_type(!spirv.matrix< 3 x i32>) -> ()
537
538// -----
539
540// expected-error @+1 {{matrix must be composed using vector type, got '!spirv.array<16 x f32>'}}
541func.func private @matrix_invalid_type(!spirv.matrix< 3 x !spirv.array<16 x f32>>) -> ()
542
543// -----
544
545// expected-error @+1 {{matrix must be composed using vector type, got '!spirv.rtarray<i32>'}}
546func.func private @matrix_invalid_type(!spirv.matrix< 3 x !spirv.rtarray<i32>>) -> ()
547
548// -----
549
550// expected-error @+1 {{matrix columns' elements must be of Float type, got 'i32'}}
551func.func private @matrix_invalid_type(!spirv.matrix<2 x vector<3xi32>>) -> ()
552
553// -----
554
555// expected-error @+1 {{expected single unsigned integer for number of columns}}
556func.func private @matrix_size_type(!spirv.matrix< x vector<3xi32>>) -> ()
557
558// -----
559
560// expected-error @+1 {{expected single unsigned integer for number of columns}}
561func.func private @matrix_size_type(!spirv.matrix<2.0 x vector<3xi32>>) -> ()
562
563// -----
564