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