1// RUN: mlir-opt -split-input-file %s -verify-diagnostics 2 3func.func @test_index_cast_shape_error(%arg0 : tensor<index>) -> tensor<2xi64> { 4 // expected-error @+1 {{'arith.index_cast' op failed to verify that input and output have the same tensor dimensions}} 5 %0 = arith.index_cast %arg0 : tensor<index> to tensor<2xi64> 6 return %0 : tensor<2xi64> 7} 8 9// ----- 10 11func.func @test_index_cast_shape_dim_error(%arg0 : tensor<2xindex>) -> tensor<?xi64> { 12 // expected-error @+1 {{'arith.index_cast' op failed to verify that input and output have the same tensor dimensions}} 13 %0 = arith.index_cast %arg0 : tensor<2xindex> to tensor<?xi64> 14 return %0 : tensor<?xi64> 15} 16 17// ----- 18 19func.func @test_index_cast_tensor_error(%arg0 : tensor<index>) -> i64 { 20 // expected-error @+1 {{'arith.index_cast' op requires the same shape for all operands and results}} 21 %0 = arith.index_cast %arg0 : tensor<index> to i64 22 return %0 : i64 23} 24 25// ----- 26 27func.func @non_signless_constant() { 28 // expected-error @+1 {{'arith.constant' op integer return type must be signless}} 29 %0 = arith.constant 0 : ui32 30 return 31} 32 33// ----- 34 35func.func @complex_constant_wrong_attribute_type() { 36 // expected-error @+1 {{'arith.constant' op failed to verify that all of {value, result} have same type}} 37 %0 = "arith.constant" () {value = 1.0 : f32} : () -> complex<f32> 38 return 39} 40 41// ----- 42 43func.func @non_signless_constant() { 44 // expected-error @+1 {{'arith.constant' op integer return type must be signless}} 45 %0 = arith.constant 0 : si32 46 return 47} 48 49// ----- 50 51func.func @bitcast_different_bit_widths(%arg : f16) -> f32 { 52 // expected-error@+1 {{are cast incompatible}} 53 %res = arith.bitcast %arg : f16 to f32 54 return %res : f32 55} 56 57// ----- 58 59func.func @constant() { 60^bb: 61 %x = "arith.constant"(){value = "xyz"} : () -> i32 // expected-error {{'arith.constant' op failed to verify that all of {value, result} have same type}} 62 return 63} 64 65// ----- 66 67func.func @constant_out_of_range() { 68^bb: 69 %x = "arith.constant"(){value = 100} : () -> i1 // expected-error {{'arith.constant' op failed to verify that all of {value, result} have same type}} 70 return 71} 72 73// ----- 74 75func.func @constant_invalid_scalable_1d_vec_initialization() { 76^bb0: 77 // expected-error@+1 {{'arith.constant' op intializing scalable vectors with elements attribute is not supported unless it's a vector splat}} 78 %c = arith.constant dense<[0, 1]> : vector<[2] x i32> 79 return 80} 81 82// ----- 83 84func.func @constant_invalid_scalable_2d_vec_initialization() { 85^bb0: 86 // expected-error@+1 {{'arith.constant' op intializing scalable vectors with elements attribute is not supported unless it's a vector splat}} 87 %c = arith.constant dense<[[3, 3], [1, 1]]> : vector<2 x [2] x i32> 88 return 89} 90 91// ----- 92 93func.func @constant_wrong_type() { 94^bb: 95 %x = "arith.constant"(){value = 10.} : () -> f32 // expected-error {{'arith.constant' op failed to verify that all of {value, result} have same type}} 96 return 97} 98 99// ----- 100 101func.func @intlimit2() { 102^bb: 103 %0 = "arith.constant"() {value = 0} : () -> i16777215 104 %1 = "arith.constant"() {value = 1} : () -> i16777216 // expected-error {{integer bitwidth is limited to 16777215 bits}} 105 return 106} 107 108// ----- 109 110func.func @func_with_ops(f32) { 111^bb0(%a : f32): 112 %sf = arith.addf %a, %a, %a : f32 // expected-error {{expected ':'}} 113} 114 115// ----- 116 117func.func @func_with_ops(f32) { 118^bb0(%a : f32): 119 %sf = arith.addf(%a, %a) : f32 // expected-error {{expected SSA operand}} 120} 121 122// ----- 123 124func.func @func_with_ops(f32) { 125^bb0(%a : f32): 126 %sf = arith.addf{%a, %a} : f32 // expected-error {{expected SSA operand}} 127} 128 129// ----- 130 131func.func @func_with_ops(f32) { 132^bb0(%a : f32): 133 // expected-error@+1 {{'arith.addi' op operand #0 must be signless-integer-like}} 134 %sf = arith.addi %a, %a : f32 135} 136 137// ----- 138 139func.func @func_with_ops(%a: f32) { 140 // expected-error@+1 {{'arith.addui_extended' op operand #0 must be signless-integer-like}} 141 %r:2 = arith.addui_extended %a, %a : f32, i32 142 return 143} 144 145// ----- 146 147func.func @func_with_ops(%a: i32) { 148 // expected-error@+1 {{'arith.addui_extended' op result #1 must be bool-like}} 149 %r:2 = arith.addui_extended %a, %a : i32, i32 150 return 151} 152 153// ----- 154 155func.func @func_with_ops(%a: vector<8xi32>) { 156 // expected-error@+1 {{'arith.addui_extended' op if an operand is non-scalar, then all results must be non-scalar}} 157 %r:2 = arith.addui_extended %a, %a : vector<8xi32>, i1 158 return 159} 160 161// ----- 162 163func.func @func_with_ops(%a: vector<8xi32>) { 164 // expected-error@+1 {{'arith.addui_extended' op all non-scalar operands/results must have the same shape and base type}} 165 %r:2 = arith.addui_extended %a, %a : vector<8xi32>, tensor<8xi1> 166 return 167} 168 169// ----- 170 171func.func @func_with_ops(i32) { 172^bb0(%a : i32): 173 %sf = arith.addf %a, %a : i32 // expected-error {{'arith.addf' op operand #0 must be floating-point-like}} 174} 175 176// ----- 177 178func.func @func_with_ops(i32) { 179^bb0(%a : i32): 180 // expected-error@+1 {{failed to satisfy constraint: allowed 64-bit signless integer cases: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}} 181 %r = "arith.cmpi"(%a, %a) {predicate = 42} : (i32, i32) -> i1 182} 183 184// ----- 185 186// Comparison are defined for arguments of the same type. 187func.func @func_with_ops(i32, i64) { 188^bb0(%a : i32, %b : i64): // expected-note {{prior use here}} 189 %r = arith.cmpi eq, %a, %b : i32 // expected-error {{use of value '%b' expects different type than prior uses}} 190} 191 192// ----- 193 194// Comparisons must have the "predicate" attribute. 195func.func @func_with_ops(i32, i32) { 196^bb0(%a : i32, %b : i32): 197 %r = arith.cmpi %a, %b : i32 // expected-error {{expected string or keyword containing one of the following enum values}} 198} 199 200// ----- 201 202// Integer comparisons are not recognized for float types. 203func.func @func_with_ops(f32, f32) { 204^bb0(%a : f32, %b : f32): 205 %r = arith.cmpi eq, %a, %b : f32 // expected-error {{'lhs' must be signless-integer-like, but got 'f32'}} 206} 207 208// ----- 209 210// Result type must be boolean like. 211func.func @func_with_ops(i32, i32) { 212^bb0(%a : i32, %b : i32): 213 %r = "arith.cmpi"(%a, %b) {predicate = 0} : (i32, i32) -> i32 // expected-error {{op result #0 must be bool-like}} 214} 215 216// ----- 217 218func.func @func_with_ops(i32, i32) { 219^bb0(%a : i32, %b : i32): 220 // expected-error@+1 {{requires attribute 'predicate'}} 221 %r = "arith.cmpi"(%a, %b) {foo = 1} : (i32, i32) -> i1 222} 223 224// ----- 225 226func.func @func_with_ops() { 227^bb0: 228 %c = arith.constant dense<0> : vector<42 x i32> 229 // expected-error@+1 {{op failed to verify that result type has i1 element type and same shape as operands}} 230 %r = "arith.cmpi"(%c, %c) {predicate = 0} : (vector<42 x i32>, vector<42 x i32>) -> vector<41 x i1> 231} 232 233// ----- 234 235func.func @func_with_ops() { 236^bb0: 237 %c = arith.constant dense<0> : tensor<42 x i32, "foo"> 238 // expected-error@+1 {{op failed to verify that result type has i1 element type and same shape as operands}} 239 %r = "arith.cmpi"(%c, %c) {predicate = 0} : (tensor<42 x i32, "foo">, tensor<42 x i32, "foo">) -> tensor<42 x i1, "bar"> 240} 241 242// ----- 243 244func.func @invalid_cmp_shape(%idx : () -> ()) { 245 // expected-error@+1 {{'lhs' must be signless-integer-like, but got '() -> ()'}} 246 %cmp = arith.cmpi eq, %idx, %idx : () -> () 247 248// ----- 249 250func.func @invalid_cmp_attr(%idx : i32) { 251 // expected-error@+1 {{expected string or keyword containing one of the following enum values}} 252 %cmp = arith.cmpi i1, %idx, %idx : i32 253 254// ----- 255 256func.func @cmpf_generic_invalid_predicate_value(%a : f32) { 257 // expected-error@+1 {{attribute 'predicate' failed to satisfy constraint: allowed 64-bit signless integer cases}} 258 %r = "arith.cmpf"(%a, %a) {predicate = 42} : (f32, f32) -> i1 259} 260 261// ----- 262 263func.func @cmpf_canonical_invalid_predicate_value(%a : f32) { 264 // expected-error@+1 {{expected string or keyword containing one of the following enum values}} 265 %r = arith.cmpf foo, %a, %a : f32 266} 267 268// ----- 269 270func.func @cmpf_canonical_invalid_predicate_value_signed(%a : f32) { 271 // expected-error@+1 {{expected string or keyword containing one of the following enum values}} 272 %r = arith.cmpf sge, %a, %a : f32 273} 274 275// ----- 276 277func.func @cmpf_canonical_invalid_predicate_value_no_order(%a : f32) { 278 // expected-error@+1 {{expected string or keyword containing one of the following enum values}} 279 %r = arith.cmpf eq, %a, %a : f32 280} 281 282// ----- 283 284func.func @cmpf_canonical_no_predicate_attr(%a : f32, %b : f32) { 285 %r = arith.cmpf %a, %b : f32 // expected-error {{}} 286} 287 288// ----- 289 290func.func @cmpf_generic_no_predicate_attr(%a : f32, %b : f32) { 291 // expected-error@+1 {{requires attribute 'predicate'}} 292 %r = "arith.cmpf"(%a, %b) {foo = 1} : (f32, f32) -> i1 293} 294 295// ----- 296 297func.func @cmpf_wrong_type(%a : i32, %b : i32) { 298 %r = arith.cmpf oeq, %a, %b : i32 // expected-error {{must be floating-point-like}} 299} 300 301// ----- 302 303func.func @cmpf_generic_wrong_result_type(%a : f32, %b : f32) { 304 // expected-error@+1 {{result #0 must be bool-like}} 305 %r = "arith.cmpf"(%a, %b) {predicate = 0} : (f32, f32) -> f32 306} 307 308// ----- 309 310func.func @cmpf_canonical_wrong_result_type(%a : f32, %b : f32) -> f32 { 311 %r = arith.cmpf oeq, %a, %b : f32 // expected-note {{prior use here}} 312 // expected-error@+1 {{use of value '%r' expects different type than prior uses}} 313 return %r : f32 314} 315 316// ----- 317 318func.func @cmpf_result_shape_mismatch(%a : vector<42xf32>) { 319 // expected-error@+1 {{op failed to verify that result type has i1 element type and same shape as operands}} 320 %r = "arith.cmpf"(%a, %a) {predicate = 0} : (vector<42 x f32>, vector<42 x f32>) -> vector<41 x i1> 321} 322 323// ----- 324 325func.func @cmpf_operand_shape_mismatch(%a : vector<42xf32>, %b : vector<41xf32>) { 326 // expected-error@+1 {{op requires all operands to have the same type}} 327 %r = "arith.cmpf"(%a, %b) {predicate = 0} : (vector<42 x f32>, vector<41 x f32>) -> vector<42 x i1> 328} 329 330// ----- 331 332func.func @cmpf_generic_operand_type_mismatch(%a : f32, %b : f64) { 333 // expected-error@+1 {{op requires all operands to have the same type}} 334 %r = "arith.cmpf"(%a, %b) {predicate = 0} : (f32, f64) -> i1 335} 336 337// ----- 338 339func.func @cmpf_canonical_type_mismatch(%a : f32, %b : f64) { // expected-note {{prior use here}} 340 // expected-error@+1 {{use of value '%b' expects different type than prior uses}} 341 %r = arith.cmpf oeq, %a, %b : f32 342} 343 344// ----- 345 346func.func @index_cast_index_to_index(%arg0: index) { 347 // expected-error@+1 {{are cast incompatible}} 348 %0 = arith.index_cast %arg0: index to index 349 return 350} 351 352// ----- 353 354func.func @index_cast_float(%arg0: index, %arg1: f32) { 355 // expected-error@+1 {{op result #0 must be signless-integer-like or memref of signless-integer, but got 'f32'}} 356 %0 = arith.index_cast %arg0 : index to f32 357 return 358} 359 360// ----- 361 362func.func @index_cast_float_to_index(%arg0: f32) { 363 // expected-error@+1 {{op operand #0 must be signless-integer-like or memref of signless-integer, but got 'f32'}} 364 %0 = arith.index_cast %arg0 : f32 to index 365 return 366} 367 368// ----- 369 370func.func @sitofp_i32_to_i64(%arg0 : i32) { 371 // expected-error@+1 {{op result #0 must be floating-point-like, but got 'i64'}} 372 %0 = arith.sitofp %arg0 : i32 to i64 373 return 374} 375 376// ----- 377 378func.func @sitofp_f32_to_i32(%arg0 : f32) { 379 // expected-error@+1 {{op operand #0 must be signless-fixed-width-integer-like, but got 'f32'}} 380 %0 = arith.sitofp %arg0 : f32 to i32 381 return 382} 383 384// ----- 385 386func.func @fpext_f32_to_f16(%arg0 : f32) { 387 // expected-error@+1 {{are cast incompatible}} 388 %0 = arith.extf %arg0 : f32 to f16 389 return 390} 391 392// ----- 393 394func.func @fpext_f16_to_f16(%arg0 : f16) { 395 // expected-error@+1 {{are cast incompatible}} 396 %0 = arith.extf %arg0 : f16 to f16 397 return 398} 399 400// ----- 401 402func.func @fpext_i32_to_f32(%arg0 : i32) { 403 // expected-error@+1 {{op operand #0 must be floating-point-like, but got 'i32'}} 404 %0 = arith.extf %arg0 : i32 to f32 405 return 406} 407 408// ----- 409 410func.func @fpext_f32_to_i32(%arg0 : f32) { 411 // expected-error@+1 {{op result #0 must be floating-point-like, but got 'i32'}} 412 %0 = arith.extf %arg0 : f32 to i32 413 return 414} 415 416// ----- 417 418func.func @fpext_vec(%arg0 : vector<2xf16>) { 419 // expected-error@+1 {{op requires the same shape for all operands and results}} 420 %0 = arith.extf %arg0 : vector<2xf16> to vector<3xf32> 421 return 422} 423 424// ----- 425 426func.func @fpext_vec_f32_to_f16(%arg0 : vector<2xf32>) { 427 // expected-error@+1 {{are cast incompatible}} 428 %0 = arith.extf %arg0 : vector<2xf32> to vector<2xf16> 429 return 430} 431 432// ----- 433 434func.func @fpext_vec_f16_to_f16(%arg0 : vector<2xf16>) { 435 // expected-error@+1 {{are cast incompatible}} 436 %0 = arith.extf %arg0 : vector<2xf16> to vector<2xf16> 437 return 438} 439 440// ----- 441 442func.func @fpext_vec_i32_to_f32(%arg0 : vector<2xi32>) { 443 // expected-error@+1 {{op operand #0 must be floating-point-like, but got 'vector<2xi32>'}} 444 %0 = arith.extf %arg0 : vector<2xi32> to vector<2xf32> 445 return 446} 447 448// ----- 449 450func.func @fpext_vec_f32_to_i32(%arg0 : vector<2xf32>) { 451 // expected-error@+1 {{op result #0 must be floating-point-like, but got 'vector<2xi32>'}} 452 %0 = arith.extf %arg0 : vector<2xf32> to vector<2xi32> 453 return 454} 455 456// ----- 457 458func.func @fpext_vec_f32_to_i32(%arg0 : tensor<2xf32, "foo">) { 459 // expected-error@+1 {{op operand type 'tensor<2xf32, "foo">' and result type 'tensor<2xf64, "bar">' are cast incompatible}} 460 %0 = arith.extf %arg0 : tensor<2xf32, "foo"> to tensor<2xf64, "bar"> 461 return 462} 463 464// ----- 465 466func.func @fptrunc_f16_to_f32(%arg0 : f16) { 467 // expected-error@+1 {{are cast incompatible}} 468 %0 = arith.truncf %arg0 : f16 to f32 469 return 470} 471 472// ----- 473 474func.func @fptrunc_f32_to_f32(%arg0 : f32) { 475 // expected-error@+1 {{are cast incompatible}} 476 %0 = arith.truncf %arg0 : f32 to f32 477 return 478} 479 480// ----- 481 482func.func @fptrunc_i32_to_f32(%arg0 : i32) { 483 // expected-error@+1 {{op operand #0 must be floating-point-like, but got 'i32'}} 484 %0 = arith.truncf %arg0 : i32 to f32 485 return 486} 487 488// ----- 489 490func.func @fptrunc_f32_to_i32(%arg0 : f32) { 491 // expected-error@+1 {{op result #0 must be floating-point-like, but got 'i32'}} 492 %0 = arith.truncf %arg0 : f32 to i32 493 return 494} 495 496// ----- 497 498func.func @fptrunc_vec(%arg0 : vector<2xf16>) { 499 // expected-error@+1 {{op requires the same shape for all operands and results}} 500 %0 = arith.truncf %arg0 : vector<2xf16> to vector<3xf32> 501 return 502} 503 504// ----- 505 506func.func @fptrunc_vec_f16_to_f32(%arg0 : vector<2xf16>) { 507 // expected-error@+1 {{are cast incompatible}} 508 %0 = arith.truncf %arg0 : vector<2xf16> to vector<2xf32> 509 return 510} 511 512// ----- 513 514func.func @fptrunc_vec_f32_to_f32(%arg0 : vector<2xf32>) { 515 // expected-error@+1 {{are cast incompatible}} 516 %0 = arith.truncf %arg0 : vector<2xf32> to vector<2xf32> 517 return 518} 519 520// ----- 521 522func.func @fptrunc_vec_i32_to_f32(%arg0 : vector<2xi32>) { 523 // expected-error@+1 {{op operand #0 must be floating-point-like, but got 'vector<2xi32>'}} 524 %0 = arith.truncf %arg0 : vector<2xi32> to vector<2xf32> 525 return 526} 527 528// ----- 529 530func.func @fptrunc_vec_f32_to_i32(%arg0 : vector<2xf32>) { 531 // expected-error@+1 {{op result #0 must be floating-point-like, but got 'vector<2xi32>'}} 532 %0 = arith.truncf %arg0 : vector<2xf32> to vector<2xi32> 533 return 534} 535 536// ----- 537 538func.func @sexti_index_as_operand(%arg0 : index) { 539 // expected-error@+1 {{op operand #0 must be signless-fixed-width-integer-like, but got 'index'}} 540 %0 = arith.extsi %arg0 : index to i128 541 return 542} 543 544// ----- 545 546func.func @zexti_index_as_operand(%arg0 : index) { 547 // expected-error@+1 {{op operand #0 must be signless-fixed-width-integer-like, but got 'index'}} 548 %0 = arith.extui %arg0 : index to i128 549 return 550} 551 552// ----- 553 554func.func @trunci_index_as_operand(%arg0 : index) { 555 // expected-error@+1 {{op operand #0 must be signless-fixed-width-integer-like, but got 'index'}} 556 %2 = arith.trunci %arg0 : index to i128 557 return 558} 559 560// ----- 561 562func.func @sexti_index_as_result(%arg0 : i1) { 563 // expected-error@+1 {{op result #0 must be signless-fixed-width-integer-like, but got 'index'}} 564 %0 = arith.extsi %arg0 : i1 to index 565 return 566} 567 568// ----- 569 570func.func @zexti_index_as_operand(%arg0 : i1) { 571 // expected-error@+1 {{op result #0 must be signless-fixed-width-integer-like, but got 'index'}} 572 %0 = arith.extui %arg0 : i1 to index 573 return 574} 575 576// ----- 577 578func.func @trunci_index_as_result(%arg0 : i128) { 579 // expected-error@+1 {{op result #0 must be signless-fixed-width-integer-like, but got 'index'}} 580 %2 = arith.trunci %arg0 : i128 to index 581 return 582} 583 584// ----- 585 586func.func @sexti_cast_to_narrower(%arg0 : i16) { 587 // expected-error@+1 {{are cast incompatible}} 588 %0 = arith.extsi %arg0 : i16 to i15 589 return 590} 591 592// ----- 593 594func.func @zexti_cast_to_narrower(%arg0 : i16) { 595 // expected-error@+1 {{are cast incompatible}} 596 %0 = arith.extui %arg0 : i16 to i15 597 return 598} 599 600// ----- 601 602func.func @trunci_cast_to_wider(%arg0 : i16) { 603 // expected-error@+1 {{are cast incompatible}} 604 %0 = arith.trunci %arg0 : i16 to i17 605 return 606} 607 608// ----- 609 610func.func @sexti_cast_to_same_width(%arg0 : i16) { 611 // expected-error@+1 {{are cast incompatible}} 612 %0 = arith.extsi %arg0 : i16 to i16 613 return 614} 615 616// ----- 617 618func.func @zexti_cast_to_same_width(%arg0 : i16) { 619 // expected-error@+1 {{are cast incompatible}} 620 %0 = arith.extui %arg0 : i16 to i16 621 return 622} 623 624// ----- 625 626func.func @trunci_cast_to_same_width(%arg0 : i16) { 627 // expected-error@+1 {{are cast incompatible}} 628 %0 = arith.trunci %arg0 : i16 to i16 629 return 630} 631 632// ----- 633 634func.func @trunci_scalable_to_fl(%arg0 : vector<[4]xi32>) { 635 // expected-error@+1 {{'arith.trunci' op requires the same shape for all operands and results}} 636 %0 = arith.trunci %arg0 : vector<[4]xi32> to vector<4xi8> 637 return 638} 639 640// ----- 641 642func.func @truncf_scalable_to_fl(%arg0 : vector<[4]xf64>) { 643 // expected-error@+1 {{'arith.truncf' op requires the same shape for all operands and results}} 644 %0 = arith.truncf %arg0 : vector<[4]xf64> to vector<4xf32> 645 return 646} 647 648// ----- 649 650func.func @extui_scalable_to_fl(%arg0 : vector<[4]xi32>) { 651 // expected-error@+1 {{'arith.extui' op requires the same shape for all operands and results}} 652 %0 = arith.extui %arg0 : vector<[4]xi32> to vector<4xi64> 653 return 654} 655 656// ----- 657 658func.func @extsi_scalable_to_fl(%arg0 : vector<[4]xi32>) { 659 // expected-error@+1 {{'arith.extsi' op requires the same shape for all operands and results}} 660 %0 = arith.extsi %arg0 : vector<[4]xi32> to vector<4xi64> 661 return 662} 663 664// ----- 665 666func.func @extsi_tensor_dim(%arg0 : tensor<4xi32>) { 667 // expected-error@+1 {{'arith.extsi' op failed to verify that input and output have the same tensor dimensions}} 668 %0 = arith.extsi %arg0 : tensor<4xi32> to tensor<?xi64> 669 return 670} 671 672// ----- 673 674func.func @extf_scalable_to_fl(%arg0 : vector<[4]xf32>) { 675 // expected-error@+1 {{'arith.extf' op requires the same shape for all operands and results}} 676 %0 = arith.extf %arg0 : vector<[4]xf32> to vector<4xf64> 677 return 678} 679 680// ----- 681 682func.func @fptoui_scalable_to_fl(%arg0 : vector<[4]xf64>) { 683 // expected-error@+1 {{'arith.fptoui' op requires the same shape for all operands and results}} 684 %0 = arith.fptoui %arg0 : vector<[4]xf64> to vector<4xi32> 685 return 686} 687 688// ----- 689 690func.func @fptosi_scalable_to_fl(%arg0 : vector<[4]xf32>) { 691 // expected-error@+1 {{'arith.fptosi' op requires the same shape for all operands and results}} 692 %0 = arith.fptosi %arg0 : vector<[4]xf32> to vector<4xi32> 693 return 694} 695 696// ----- 697 698func.func @uitofp_scalable_to_fl(%arg0 : vector<[4]xi32>) { 699 // expected-error@+1 {{'arith.uitofp' op requires the same shape for all operands and results}} 700 %0 = arith.uitofp %arg0 : vector<[4]xi32> to vector<4xf32> 701 return 702} 703 704// ----- 705 706func.func @sitofp_scalable_to_fl(%arg0 : vector<[4]xi32>) { 707 // expected-error@+1 {{'arith.sitofp' op requires the same shape for all operands and results}} 708 %0 = arith.sitofp %arg0 : vector<[4]xi32> to vector<4xf32> 709 return 710} 711 712// ----- 713 714func.func @bitcast_scalable_to_fl(%arg0 : vector<[4]xf32>) { 715 // expected-error@+1 {{'arith.bitcast' op requires the same shape for all operands and results}} 716 %0 = arith.bitcast %arg0 : vector<[4]xf32> to vector<4xi32> 717 return 718} 719 720// ----- 721 722func.func @bitcast_tensor_dim(%arg0 : tensor<4xf32>) { 723 // expected-error@+1 {{'arith.bitcast' op failed to verify that input and output have the same tensor dimensions}} 724 %0 = arith.bitcast %arg0 : tensor<4xf32> to tensor<?xi32> 725 return 726} 727 728// ----- 729 730func.func @bitcast_tensor_dim(%arg0 : tensor<?xf32>) { 731 // expected-error@+1 {{'arith.bitcast' op failed to verify that input and output have the same tensor dimensions}} 732 %0 = arith.bitcast %arg0 : tensor<?xf32> to tensor<4xi32> 733 return 734} 735 736// ----- 737 738func.func @trunci_fl_to_scalable(%arg0 : vector<4xi32>) { 739 // expected-error@+1 {{'arith.trunci' op requires the same shape for all operands and results}} 740 %0 = arith.trunci %arg0 : vector<4xi32> to vector<[4]xi8> 741 return 742} 743 744// ----- 745 746func.func @truncf_fl_to_scalable(%arg0 : vector<4xf64>) { 747 // expected-error@+1 {{'arith.truncf' op requires the same shape for all operands and results}} 748 %0 = arith.truncf %arg0 : vector<4xf64> to vector<[4]xf32> 749 return 750} 751 752// ----- 753 754func.func @truncf_tensor_dim(%arg0 : tensor<4xf64>) { 755 // expected-error@+1 {{'arith.truncf' op failed to verify that input and output have the same tensor dimensions}} 756 %0 = arith.truncf %arg0 : tensor<4xf64> to tensor<?xf32> 757 return 758} 759 760// ----- 761 762func.func @extui_fl_to_scalable(%arg0 : vector<4xi32>) { 763 // expected-error@+1 {{'arith.extui' op requires the same shape for all operands and results}} 764 %0 = arith.extui %arg0 : vector<4xi32> to vector<[4]xi64> 765 return 766} 767 768// ----- 769 770func.func @extsi_fl_to_scalable(%arg0 : vector<4xi32>) { 771 // expected-error@+1 {{'arith.extsi' op requires the same shape for all operands and results}} 772 %0 = arith.extsi %arg0 : vector<4xi32> to vector<[4]xi64> 773 return 774} 775 776// ----- 777 778func.func @extf_fl_to_scalable(%arg0 : vector<4xf32>) { 779 // expected-error@+1 {{'arith.extf' op requires the same shape for all operands and results}} 780 %0 = arith.extf %arg0 : vector<4xf32> to vector<[4]xf64> 781 return 782} 783 784// ----- 785 786func.func @fptoui_fl_to_scalable(%arg0 : vector<4xf64>) { 787 // expected-error@+1 {{'arith.fptoui' op requires the same shape for all operands and results}} 788 %0 = arith.fptoui %arg0 : vector<4xf64> to vector<[4]xi32> 789 return 790} 791 792// ----- 793 794func.func @fptosi_fl_to_scalable(%arg0 : vector<4xf32>) { 795 // expected-error@+1 {{'arith.fptosi' op requires the same shape for all operands and results}} 796 %0 = arith.fptosi %arg0 : vector<4xf32> to vector<[4]xi32> 797 return 798} 799 800// ----- 801 802func.func @uitofp_fl_to_scalable(%arg0 : vector<4xi32>) { 803 // expected-error@+1 {{'arith.uitofp' op requires the same shape for all operands and results}} 804 %0 = arith.uitofp %arg0 : vector<4xi32> to vector<[4]xf32> 805 return 806} 807 808// ----- 809 810func.func @sitofp_fl_to_scalable(%arg0 : vector<4xi32>) { 811 // expected-error@+1 {{'arith.sitofp' op requires the same shape for all operands and results}} 812 %0 = arith.sitofp %arg0 : vector<4xi32> to vector<[4]xf32> 813 return 814} 815 816// ----- 817 818func.func @bitcast_fl_to_scalable(%arg0 : vector<4xf32>) { 819 // expected-error@+1 {{'arith.bitcast' op requires the same shape for all operands and results}} 820 %0 = arith.bitcast %arg0 : vector<4xf32> to vector<[4]xi32> 821 return 822} 823 824// ----- 825 826func.func @func() { 827 %c0 = arith.constant // expected-error {{expected attribute value}} 828 829 %x = arith.constant 1 : i32 830} 831 832// ----- 833 834func.func @disallow_zero_rank_tensor_with_ranked_tensor(%arg0 : tensor<i1>, %arg1 : tensor<2xi64>, %arg2 : tensor<2xi64>) -> tensor<2xi64> { 835 // expected-error @+1 {{'arith.select' op failed to verify that condition is signless i1 or has matching shape}} 836 %0 = arith.select %arg0, %arg1, %arg2 : tensor<i1>, tensor<2xi64> 837 return %0 : tensor<2xi64> 838} 839 840// ----- 841 842func.func @disallow_zero_rank_tensor_with_unranked_tensor(%arg0 : tensor<i1>, %arg1 : tensor<2x?xi64>, %arg2 : tensor<2x?xi64>) -> tensor<2x?xi64> { 843 // expected-error @+1 {{'arith.select' op failed to verify that condition is signless i1 or has matching shape}} 844 %0 = arith.select %arg0, %arg1, %arg2 : tensor<i1>, tensor<2x?xi64> 845 return %0 : tensor<2x?xi64> 846} 847 848// ----- 849 850func.func @select_tensor_encoding( 851 %arg0 : tensor<8xi1, "bar">, %arg1 : tensor<8xi32, "foo">, %arg2 : tensor<8xi32, "foo">) -> tensor<8xi32, "foo"> { 852 // expected-error @+1 {{'arith.select' op expected condition type to have the same shape as the result type}} 853 %0 = arith.select %arg0, %arg1, %arg2 : tensor<8xi1, "bar">, tensor<8xi32, "foo"> 854 return %0 : tensor<8xi32, "foo"> 855} 856 857// ----- 858 859func.func @bitcast_index_0(%arg0 : i64) -> index { 860 // expected-error @+1 {{'arith.bitcast' op result #0 must be signless-integer-or-float-like or memref of signless-integer or float, but got 'index'}} 861 %0 = arith.bitcast %arg0 : i64 to index 862 return %0 : index 863} 864 865// ----- 866 867func.func @bitcast_index_1(%arg0 : index) -> i64 { 868 // expected-error @+1 {{'arith.bitcast' op operand #0 must be signless-integer-or-float-like or memref of signless-integer or float, but got 'index'}} 869 %0 = arith.bitcast %arg0 : index to i64 870 return %0 : i64 871} 872