brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.3 KiB · 68305de Raw
964 lines · plain
1// RUN: mlir-opt %s -split-input-file -verify-diagnostics | FileCheck %s2 3// expected-error @below {{expects the entry block to have at least one argument}}4transform.sequence failures(propagate) {5}6 7// -----8 9// expected-error @below {{expects the first entry block argument to be of type implementing TransformHandleTypeInterface}}10transform.sequence failures(propagate) {11^bb0(%rag0: i64):12}13 14// -----15 16// expected-note @below {{nested in another possible top-level op}}17transform.sequence failures(propagate) {18^bb0(%arg0: !transform.any_op):19  // expected-error @below {{expects operands to be provided for a nested op}}20  transform.sequence failures(propagate) {21  ^bb1(%arg1: !transform.any_op):22  }23}24 25// -----26 27// expected-error @below {{expects to have a terminator in the body}}28"transform.sequence"() <{failure_propagation_mode = 1 : i32, operandSegmentSizes = array<i32: 0, 0>}> ({29^bb0(%arg0: !transform.any_op):30  transform.apply_patterns to %arg0 {31  } : !transform.any_op32}) : () -> ()33 34 35// -----36 37// expected-error @below {{'transform.sequence' op expects trailing entry block arguments to be of type implementing TransformHandleTypeInterface, TransformValueHandleTypeInterface or TransformParamTypeInterface}}38// expected-note @below {{argument #1 does not}}39transform.sequence failures(propagate) {40^bb0(%arg0: !transform.any_op, %arg1: i64):41}42 43// -----44 45// expected-error @below {{expected children ops to implement TransformOpInterface}}46transform.sequence failures(propagate) {47^bb0(%arg0: !transform.any_op):48  // expected-note @below {{op without interface}}49  arith.constant 42.0 : f3250}51 52// -----53 54// expected-error @below {{expects the types of the terminator operands to match the types of the result}}55%0 = transform.sequence -> !transform.any_op failures(propagate) {56^bb0(%arg0: !transform.any_op):57  // expected-note @below {{terminator}}58  transform.yield59}60 61// -----62 63transform.sequence failures(propagate) {64^bb0(%arg0: !transform.any_op):65  // expected-error @below {{expects the type of the block argument to match the type of the operand}}66  transform.sequence %arg0: !transform.any_op failures(propagate) {67  ^bb1(%arg1: !transform.op<"builtin.module">):68    transform.yield69  }70}71 72// -----73 74transform.sequence failures(propagate) {75^bb0(%arg0: !transform.any_op, %arg1: !transform.any_op, %arg2: !transform.any_op):76  // expected-error @below {{expected types to be provided for all operands}}77  transform.sequence %arg0, %arg1, %arg2 : (!transform.any_op, !transform.any_op) failures(propagate) {78  ^bb0(%arg3: !transform.any_op, %arg4: !transform.any_op, %arg5: !transform.any_op):79  }80}81 82// -----83 84%0 = "test.generate_something"() : () -> !transform.any_op85// expected-error @below {{does not expect extra operands when used as top-level}}86"transform.sequence"(%0) ({87^bb0(%arg0: !transform.any_op):88  "transform.yield"() : () -> ()89}) {failure_propagation_mode = 1 : i32, operandSegmentSizes = array<i32: 0, 1>} : (!transform.any_op) -> ()90 91// -----92 93// expected-note @below {{nested in another possible top-level op}}94transform.with_pdl_patterns {95^bb0(%arg0: !transform.any_op):96  // expected-error @below {{expects operands to be provided for a nested op}}97  transform.sequence failures(propagate) {98  ^bb1(%arg1: !transform.any_op):99  }100}101 102// -----103 104// expected-error @below {{expects only one non-pattern op in its body}}105transform.with_pdl_patterns {106^bb0(%arg0: !transform.any_op):107  // expected-note @below {{first non-pattern op}}108  transform.sequence failures(propagate) {109  ^bb1(%arg1: !transform.any_op):110  }111  // expected-note @below {{second non-pattern op}}112  transform.sequence failures(propagate) {113  ^bb1(%arg1: !transform.any_op):114  }115}116 117// -----118 119// expected-error @below {{expects only pattern and top-level transform ops in its body}}120transform.with_pdl_patterns {121^bb0(%arg0: !transform.any_op):122  // expected-note @below {{offending op}}123  "test.something"() : () -> ()124}125 126// -----127 128// expected-note @below {{parent operation}}129transform.with_pdl_patterns {130^bb0(%arg0: !transform.any_op):131   // expected-error @below {{op cannot be nested}}132  transform.with_pdl_patterns %arg0 : !transform.any_op {133  ^bb1(%arg1: !transform.any_op):134  }135}136 137// -----138 139// expected-error @below {{op expects at least one non-pattern op}}140transform.with_pdl_patterns {141^bb0(%arg0: !transform.any_op):142  pdl.pattern @some : benefit(1) {143    %0 = pdl.operation "test.foo"144    pdl.rewrite %0 with "transform.dialect"145  }146}147 148// -----149 150transform.sequence failures(propagate) {151^bb0(%arg0: !transform.any_op):152  // expected-error @below {{op expects at least one non-pattern op}}153  with_pdl_patterns %arg0 : !transform.any_op {154  ^bb1(%arg1: !transform.any_op):155  }156}157 158 159// -----160 161// expected-error @below {{expects at least one region}}162"transform.test_transform_unrestricted_op_no_interface"() : () -> ()163 164// -----165 166// expected-error @below {{expects a single-block region}}167"transform.test_transform_unrestricted_op_no_interface"() ({168^bb0(%arg0: !transform.any_op):169  "test.potential_terminator"() : () -> ()170^bb1:171  "test.potential_terminator"() : () -> ()172}) : () -> ()173 174// -----175 176transform.sequence failures(propagate) {177^bb0(%arg0: !transform.any_op):178  // expected-error @below {{result #0 has more than one potential consumer}}179  %0 = test_produce_self_handle_or_forward_operand : () -> !transform.any_op180  // expected-note @below {{used here as operand #0}}181  test_consume_operand_of_op_kind_or_fail %0, "transform.test_produce_self_handle_or_forward_operand" : !transform.any_op182  // expected-note @below {{used here as operand #0}}183  test_consume_operand_of_op_kind_or_fail %0, "transform.test_produce_self_handle_or_forward_operand" : !transform.any_op184}185 186// -----187 188transform.sequence failures(propagate) {189^bb0(%arg0: !transform.any_op):190  // expected-error @below {{result #0 has more than one potential consumer}}191  %0 = test_produce_self_handle_or_forward_operand : () -> !transform.any_op192  // expected-note @below {{used here as operand #0}}193  test_consume_operand_of_op_kind_or_fail %0, "transform.test_produce_self_handle_or_forward_operand" : !transform.any_op194  // expected-note @below {{used here as operand #0}}195  transform.sequence %0 : !transform.any_op failures(propagate) {196  ^bb1(%arg1: !transform.any_op):197    test_consume_operand_of_op_kind_or_fail %arg1, "transform.test_produce_self_handle_or_forward_operand" : !transform.any_op198  }199}200 201// -----202 203transform.sequence failures(propagate) {204^bb0(%arg0: !transform.any_op):205  // expected-error @below {{result #0 has more than one potential consumer}}206  %0 = test_produce_self_handle_or_forward_operand : () -> !transform.any_op207  // expected-note @below {{used here as operand #0}}208  test_consume_operand_of_op_kind_or_fail %0, "transform.test_produce_self_handle_or_forward_operand" : !transform.any_op209  transform.sequence %0 : !transform.any_op failures(propagate) {210  ^bb1(%arg1: !transform.any_op):211    // expected-note @below {{used here as operand #0}}212    test_consume_operand_of_op_kind_or_fail %0, "transform.test_produce_self_handle_or_forward_operand" : !transform.any_op213  }214}215 216// -----217 218transform.sequence failures(propagate) {219^bb0(%arg0: !transform.any_op):220  // expected-error @below {{result #0 has more than one potential consumer}}221  %0 = test_produce_self_handle_or_forward_operand : () -> !transform.any_op222  // expected-note @below {{used here as operand #0}}223  test_consume_operand_of_op_kind_or_fail %0, "transform.test_produce_self_handle_or_forward_operand" : !transform.any_op224  // expected-note @below {{used here as operand #0}}225  transform.sequence %0 : !transform.any_op failures(propagate) {226  ^bb1(%arg1: !transform.any_op):227    transform.sequence %arg1 : !transform.any_op failures(propagate) {228    ^bb2(%arg2: !transform.any_op):229      test_consume_operand_of_op_kind_or_fail %arg2, "transform.test_produce_self_handle_or_forward_operand" : !transform.any_op230    }231  }232}233 234// -----235 236transform.sequence failures(propagate) {237^bb1(%arg1: !transform.any_op):238  // expected-error @below {{expects at least one region}}239  transform.alternatives240}241 242// -----243 244transform.sequence failures(propagate) {245^bb1(%arg1: !transform.any_op):246  // expected-error @below {{expects terminator operands to have the same type as results of the operation}}247  %2 = transform.alternatives %arg1 : !transform.any_op -> !transform.any_op {248  ^bb2(%arg2: !transform.any_op):249    transform.yield %arg2 : !transform.any_op250  }, {251  ^bb2(%arg2: !transform.any_op):252    // expected-note @below {{terminator}}253    transform.yield254  }255}256 257// -----258 259// expected-error @below {{expects the entry block to have at least one argument}}260transform.alternatives {261^bb0:262  transform.yield263}264 265// -----266 267transform.sequence failures(propagate) {268^bb0(%arg0: !transform.any_op):269  // expected-error @below {{result #0 has more than one potential consumer}}270  %0 = test_produce_self_handle_or_forward_operand : () -> !transform.any_op271  // expected-note @below {{used here as operand #0}}272  transform.foreach %0 : !transform.any_op {273  ^bb1(%arg1: !transform.any_op):274    transform.test_consume_operand %arg1 : !transform.any_op275  }276  // expected-note @below {{used here as operand #0}}277  transform.test_consume_operand %0 : !transform.any_op278}279 280// -----281 282transform.sequence failures(propagate) {283  ^bb0(%root: !transform.any_op):284  %op = test_produce_self_handle_or_forward_operand : () -> !transform.any_op285  // expected-error @below {{op expects the same number of targets as the body has block arguments}}286  transform.foreach %op : !transform.any_op -> !transform.any_op, !transform.any_value {287  ^bb1(%op_arg: !transform.any_op, %val_arg: !transform.any_value):288    transform.yield %op_arg, %val_arg : !transform.any_op, !transform.any_value289  }290}291 292// -----293 294transform.sequence failures(propagate) {295  ^bb0(%root: !transform.any_op):296  %op = test_produce_self_handle_or_forward_operand : () -> !transform.any_op297  // expected-error @below {{op expects co-indexed targets and the body's block arguments to have the same op/value/param type}}298  transform.foreach %op : !transform.any_op -> !transform.any_value {299  ^bb1(%val_arg: !transform.any_value):300    transform.yield %val_arg : !transform.any_value301  }302}303 304// -----305 306transform.sequence failures(propagate) {307  ^bb0(%root: !transform.any_op):308  %op = test_produce_self_handle_or_forward_operand : () -> !transform.any_op309  // expected-error @below {{op expects the same number of results as the yield terminator has operands}}310  transform.foreach %op : !transform.any_op -> !transform.any_op, !transform.any_op {311  ^bb1(%arg_op: !transform.any_op):312    transform.yield %arg_op : !transform.any_op313  }314}315 316// -----317 318transform.sequence failures(propagate) {319  ^bb0(%root: !transform.any_op):320  %op = test_produce_self_handle_or_forward_operand : () -> !transform.any_op321  %val = transform.test_produce_value_handle_to_self_operand %op : (!transform.any_op) -> !transform.any_value322  // expected-error @below {{expects co-indexed results and yield operands to have the same op/value/param type}}323  transform.foreach %op, %val : !transform.any_op, !transform.any_value -> !transform.any_op, !transform.any_value {324  ^bb1(%op_arg: !transform.any_op, %val_arg: !transform.any_value):325    transform.yield %val_arg, %op_arg : !transform.any_value, !transform.any_op326  }327}328 329// -----330 331transform.sequence failures(suppress) {332^bb0(%arg0: !transform.any_op):333  // expected-error @below {{TransformOpInterface requires memory effects on operands to be specified}}334  // expected-note @below {{no effects specified for operand #0}}335  transform.test_required_memory_effects %arg0 {modifies_payload} : (!transform.any_op) -> !transform.any_op336}337 338// -----339 340transform.sequence failures(suppress) {341^bb0(%arg0: !transform.any_op):342  // expected-error @below {{TransformOpInterface requires 'allocate' memory effect to be specified for results}}343  // expected-note @below {{no 'allocate' effect specified for result #0}}344  transform.test_required_memory_effects %arg0 {has_operand_effect, modifies_payload} : (!transform.any_op) -> !transform.any_op345}346 347// -----348 349// expected-error @below {{attribute can only be attached to operations with symbol tables}}350"test.unknown_container"() { transform.with_named_sequence } : () -> ()351 352// -----353 354module attributes { transform.with_named_sequence } {355  // expected-error @below {{expected a non-empty body block}}356  "transform.named_sequence"() ({357  ^bb0:358  }) { sym_name = "external_named_sequence", function_type = () -> () } : () -> ()359 360  transform.sequence failures(propagate) {361  ^bb0(%arg0: !transform.any_op):362    transform.include @external_named_sequence failures(propagate) () : () -> ()363  }364}365 366// -----367 368module attributes { transform.with_named_sequence } {369  // expected-error @below {{recursion not allowed in named sequences}}370  transform.named_sequence @self_recursion() -> () {371    transform.include @self_recursion failures(suppress) () : () -> ()372    transform.yield373  }374}375 376// -----377 378module @mutual_recursion attributes { transform.with_named_sequence } {379  // expected-note @below {{operation on recursion stack}}  380  transform.named_sequence @foo(%arg0: !transform.any_op {transform.readonly}) -> () {381    transform.include @bar failures(suppress) (%arg0) : (!transform.any_op) -> ()382    transform.yield383  }384 385  // expected-error @below {{recursion not allowed in named sequences}}386  transform.named_sequence @bar(%arg0: !transform.any_op {transform.readonly}) -> () {387    transform.include @foo failures(propagate) (%arg0) : (!transform.any_op) -> ()388    transform.yield389  }390}391 392// -----393 394// expected-error @below {{unknown attribute: "transform.unknown_container"}}395module @unknown_attribute attributes { transform.unknown_container } {}396 397// -----398 399module {400  transform.sequence failures(suppress) {401  ^bb0(%arg0: !transform.any_op):402    // expected-error @below {{op does not reference a named transform sequence}}403    transform.include @non_existent failures(propagate) () : () -> ()404  }405}406 407// -----408 409module attributes { transform.with_named_sequence } {410  transform.sequence failures(suppress) {411  ^bb0(%arg0: !transform.any_op):412    // expected-error @below {{requires attribute 'target'}}413    "transform.include"() {failure_propagation_mode = 1 : i32} : () -> ()414  }415}416 417// -----418 419module attributes { transform.with_named_sequence } {420  transform.named_sequence @foo(%arg0: !transform.any_op) -> () {421    transform.yield422  }423 424  transform.sequence failures(suppress) {425  ^bb0(%arg1: !transform.any_op):426    // expected-error @below {{incorrect number of operands for callee}}427    transform.include @foo failures(suppress) () : () -> ()428  }429}430 431// -----432 433module attributes { transform.with_named_sequence } {434  transform.named_sequence @foo(%arg0: !transform.any_op {transform.readonly}) -> () {435    transform.yield436  }437 438  transform.sequence failures(suppress) {439  ^bb0(%arg1: !transform.op<"builtin.module">):440    // expected-error @below {{operand type mismatch: expected operand type '!transform.any_op', but provided '!transform.op<"builtin.module">' for operand number 0}}441    transform.include @foo failures(suppress) (%arg1) : (!transform.op<"builtin.module">) -> ()442  }443}444 445// -----446 447module attributes { transform.with_named_sequence } {448  transform.named_sequence @foo(%arg0: !transform.any_op {transform.readonly}) -> (!transform.any_op) {449    transform.yield %arg0 : !transform.any_op450  }451 452  transform.sequence failures(suppress) {453  ^bb0(%arg1: !transform.any_op):454    // expected-error @below {{incorrect number of results for callee}}455    transform.include @foo failures(suppress) (%arg1) : (!transform.any_op) -> ()456  }457}458 459// -----460 461module attributes { transform.with_named_sequence } {462  transform.named_sequence @foo(%arg0: !transform.any_op {transform.readonly}) -> (!transform.any_op) {463    transform.yield %arg0 : !transform.any_op464  }465 466  transform.sequence failures(suppress) {467  ^bb0(%arg1: !transform.any_op):468    // expected-error @below {{type of result #0 must implement the same transform dialect interface as the corresponding callee result}}469    transform.include @foo failures(suppress) (%arg1) : (!transform.any_op) -> (!transform.any_value)470  }471}472 473// -----474 475// expected-note @below {{symbol table operation}}476module {477  // expected-error @below {{expects the parent symbol table to have the 'transform.with_named_sequence' attribute}}478  transform.named_sequence @parent_has_no_attributes() {479    transform.yield480  }481}482 483// -----484 485module attributes { transform.with_named_sequence} {486  transform.sequence failures(suppress) {487  ^bb0(%arg0: !transform.any_op):488    // expected-error @below {{op symbol's parent must have the SymbolTable trai}}489    transform.named_sequence @nested() {490      transform.yield491    }492  }493}494 495// -----496 497module attributes { transform.with_named_sequence} {498  func.func private @foo()499 500  // expected-error @below {{expected 'transform.yield' as terminator}}501  transform.named_sequence @nested() {502    // expected-note @below {{terminator}}503    func.call @foo() : () -> ()504  }505}506 507 508// -----509 510module attributes { transform.with_named_sequence} {511  func.func private @foo()512 513  transform.named_sequence @nested(%arg0: !transform.any_op) {514    // expected-error @below {{expected terminator to have as many operands as the parent op has results}}515    transform.yield %arg0 : !transform.any_op516  }517}518 519// -----520 521module attributes { transform.with_named_sequence} {522  func.func private @foo()523 524  transform.named_sequence @nested(%arg0: !transform.any_op) -> !transform.op<"builtin.module"> {525    // expected-error @below {{the type of the terminator operand #0 must match the type of the corresponding parent op result}}526    transform.yield %arg0 : !transform.any_op527  }528}529 530// -----531 532module attributes { transform.with_named_sequence } {533  // expected-error @below {{must provide consumed/readonly status for arguments of external or called ops}}534  transform.named_sequence @foo(%op: !transform.any_op )535}536 537// -----538 539module attributes { transform.with_named_sequence } {540  // expected-error @below {{argument #0 cannot be both readonly and consumed}}541  transform.named_sequence @foo(%op: !transform.any_op { transform.readonly, transform.consumed } )542}543 544// -----545 546module attributes { transform.with_named_sequence } {547  transform.named_sequence @foo(%op: !transform.any_op) {548    transform.debug.emit_remark_at %op, "message" : !transform.any_op549    transform.yield550  }551 552  transform.sequence failures(propagate) {553  ^bb0(%arg0: !transform.any_op):554    // expected-error @below {{TransformOpInterface requires memory effects on operands to be specified}}555    // expected-note @below {{no effects specified for operand #0}}556    transform.include @foo failures(propagate) (%arg0) : (!transform.any_op) -> ()557    transform.yield558  }559}560 561// -----562 563module attributes { transform.with_named_sequence } {564  // expected-error @below {{argument #0 cannot be both readonly and consumed}}565  transform.named_sequence @foo(%op: !transform.any_op {transform.readonly, transform.consumed}) {566    transform.debug.emit_remark_at %op, "message" : !transform.any_op567    transform.yield568  }569 570  transform.sequence failures(propagate) {571  ^bb0(%arg0: !transform.any_op):572    transform.include @foo failures(propagate) (%arg0) : (!transform.any_op) -> ()573    transform.yield574  }575}576 577// -----578 579module attributes { transform.with_named_sequence } {580  // Note that printing a warning doesn't result in verification failures, so this581  // also checks for the IR being printed back.582  // CHECK-LABEL: transform.named_sequence @emit_warning_only583  // expected-warning @below {{argument #0 is not consumed in the body but is marked as consume}}584  transform.named_sequence @emit_warning_only(%op: !transform.any_op {transform.consumed}) {585    transform.debug.emit_remark_at %op, "message" : !transform.any_op586    transform.yield587  }588 589  transform.sequence failures(propagate) {590  ^bb0(%arg0: !transform.any_op):591    transform.include @emit_warning_only failures(propagate) (%arg0) : (!transform.any_op) -> ()592    transform.yield593  }594}595 596// -----597 598module attributes { transform.with_named_sequence } {599  // expected-error @below {{argument #0 is consumed in the body but is not marked as such}}600  transform.named_sequence @foo(%op: !transform.any_op {transform.readonly}) {601    transform.test_consume_operand %op : !transform.any_op602    transform.yield603  }604 605  transform.sequence failures(propagate) {606  ^bb0(%arg0: !transform.any_op):607    transform.include @foo failures(propagate) (%arg0) : (!transform.any_op) -> ()608    transform.yield609  }610}611 612// -----613 614// Checking that consumptions annotations are used correctly in invocation checks.615module attributes { transform.with_named_sequence } {616  transform.named_sequence @foo(%op: !transform.any_op { transform.consumed } )617 618  // expected-error @below {{'transform.sequence' op block argument #0 has more than one potential consumer}}619  transform.sequence failures(propagate) {620  ^bb0(%arg0: !transform.any_op):621    // expected-note @below {{used here as operand #0}}622    transform.include @foo failures(propagate) (%arg0) : (!transform.any_op) -> ()623    // expected-note @below {{used here as operand #0}}624    transform.include @foo failures(propagate) (%arg0) : (!transform.any_op) -> ()625    transform.yield626  }627}628 629// -----630 631module attributes { transform.with_named_sequence } {632  transform.sequence failures(propagate) {633  ^bb0(%root: !transform.any_op):634    // expected-error @below {{unresolved matcher symbol @foo}}635    transform.foreach_match in %root636      @foo -> @bar : (!transform.any_op) -> !transform.any_op637  }638}639 640// -----641 642module attributes { transform.with_named_sequence } {643  func.func private @foo()644 645  transform.sequence failures(propagate) {646  ^bb0(%root: !transform.any_op):647    // expected-error @below {{unresolved matcher symbol @foo}}648    transform.foreach_match in %root649      @foo -> @bar : (!transform.any_op) -> !transform.any_op650  }651}652 653// -----654 655module attributes { transform.with_named_sequence } {656  transform.named_sequence @match()657 658  transform.sequence failures(propagate) {659  ^bb0(%root: !transform.any_op):660    // expected-error @below {{unresolved action symbol @bar}}661    transform.foreach_match in %root662      @match -> @bar : (!transform.any_op) -> !transform.any_op663  }664}665 666// -----667 668module attributes { transform.with_named_sequence } {669  func.func private @bar()670  transform.named_sequence @match()671 672  transform.sequence failures(propagate) {673  ^bb0(%root: !transform.any_op):674    // expected-error @below {{unresolved action symbol @bar}}675    transform.foreach_match in %root676      @match -> @bar : (!transform.any_op) -> !transform.any_op677  }678}679 680// -----681 682module attributes { transform.with_named_sequence } {683  // expected-note @below {{symbol declaration}}684  transform.named_sequence @match(!transform.any_op {transform.readonly}, !transform.any_op {transform.readonly}) -> !transform.any_op685  transform.named_sequence @action(!transform.any_op {transform.readonly})686 687  transform.sequence failures(propagate) {688  ^bb0(%root: !transform.any_op):689    // expected-error @below {{the number of operands (1) doesn't match the number of matcher arguments (2) for @match}}690    transform.foreach_match in %root691      @match -> @action : (!transform.any_op) -> !transform.any_op692  }693}694 695// -----696 697module attributes { transform.with_named_sequence } {698  // expected-note @below {{symbol declaration}}699  transform.named_sequence @match(!transform.any_op {transform.readonly}, !transform.any_op {transform.consumed}) -> !transform.any_op700  transform.named_sequence @action(!transform.any_op {transform.readonly})701 702  transform.sequence failures(propagate) {703  ^bb0(%root: !transform.any_op):704    %r = transform.replicate num(%root) %root : !transform.any_op, !transform.any_op705    // expected-error @below {{'transform.foreach_match' op does not expect matcher symbol to consume its operand #1}}706    transform.foreach_match in %root, %r707      @match -> @action : (!transform.any_op, !transform.any_op) -> !transform.any_op708  }709}710 711// -----712 713module attributes { transform.with_named_sequence } {714  // expected-note @below {{symbol declaration}}715  transform.named_sequence @match(!transform.any_op {transform.readonly}, !transform.any_op {transform.readonly}) -> !transform.any_op716  transform.named_sequence @action(!transform.any_op {transform.readonly})717 718  transform.sequence failures(propagate) {719  ^bb0(%root: !transform.any_op):720    %r = transform.get_operand %root[0] : (!transform.any_op) -> !transform.any_value721    // expected-error @below {{mismatching type interfaces for operand and matcher argument #1 of matcher @match}}722    transform.foreach_match in %root, %r723      @match -> @action : (!transform.any_op, !transform.any_value) -> !transform.any_op724  }725}726 727// -----728 729module attributes { transform.with_named_sequence } {730  transform.named_sequence @match(!transform.any_op {transform.readonly}) -> !transform.any_op731  // expected-note @below {{symbol declaration}}732  transform.named_sequence @action(!transform.any_op {transform.readonly}) -> !transform.any_op733 734  transform.sequence failures(propagate) {735  ^bb0(%root: !transform.any_op):736    // expected-error @below {{the number of action results (1) for @action doesn't match the number of extra op results (0)}}737    transform.foreach_match in %root738      @match -> @action : (!transform.any_op) -> !transform.any_op739  }740}741 742// -----743 744module attributes { transform.with_named_sequence } {745  transform.named_sequence @match(!transform.any_op {transform.readonly}) -> !transform.any_op746  // expected-note @below {{symbol declaration}}747  transform.named_sequence @action(!transform.any_op {transform.readonly}) -> !transform.any_op748 749  transform.sequence failures(propagate) {750  ^bb0(%root: !transform.any_op):751    // expected-error @below {{mismatching type interfaces for action result #0 of action @action and op result}}752    transform.foreach_match in %root753      @match -> @action : (!transform.any_op) -> (!transform.any_op, !transform.any_value)754  }755}756 757// -----758 759module attributes { transform.with_named_sequence } {760  transform.named_sequence @match(!transform.any_op {transform.readonly}) -> !transform.any_op761  transform.named_sequence @action()762 763  transform.sequence failures(propagate) {764  ^bb0(%root: !transform.any_op):765    // expected-error @below {{mismatching number of matcher results and action arguments between @match (1) and @action (0)}}766    transform.foreach_match in %root767      @match -> @action : (!transform.any_op) -> !transform.any_op768  }769}770 771// -----772 773module attributes { transform.with_named_sequence } {774  transform.named_sequence @match(!transform.any_op {transform.readonly})775  // expected-note @below {{symbol declaration}}776  transform.named_sequence @action() -> !transform.any_op777 778  transform.sequence failures(propagate) {779  ^bb0(%root: !transform.any_op):780    // expected-error @below {{the number of action results (1) for @action doesn't match the number of extra op results (0)}}781    transform.foreach_match in %root782      @match -> @action : (!transform.any_op) -> !transform.any_op783  }784}785 786// -----787 788module attributes { transform.with_named_sequence } {789  // expected-note @below {{symbol declaration}}790  transform.named_sequence @match()791  transform.named_sequence @action()792 793  transform.sequence failures(propagate) {794  ^bb0(%root: !transform.any_op):795    // expected-error @below {{the number of operands (1) doesn't match the number of matcher arguments (0) for @match}}796    transform.foreach_match in %root797      @match -> @action : (!transform.any_op) -> !transform.any_op798  }799}800 801// -----802 803module attributes { transform.with_named_sequence } {804  // expected-note @below {{symbol declaration}}805  transform.named_sequence @match(!transform.any_op {transform.consumed})806  transform.named_sequence @action()807 808  transform.sequence failures(propagate) {809  ^bb0(%root: !transform.any_op):810    // expected-error @below {{'transform.foreach_match' op does not expect matcher symbol to consume its operand #0}}811    transform.foreach_match in %root812      @match -> @action : (!transform.any_op) -> !transform.any_op813  }814}815 816// -----817 818transform.sequence failures(propagate) {819^bb0(%arg0: !transform.any_op):820  // expected-error @below {{expected children ops to implement PatternDescriptorOpInterface}}821  transform.apply_patterns to %arg0 {822    // expected-note @below {{op without interface}}823    transform.named_sequence @foo()824  } : !transform.any_op825}826 827// -----828 829transform.sequence failures(propagate) {830^bb0(%arg0: !transform.any_op):831  // expected-error @below {{expected the type of the parameter attribute ('i64') to match the parameter type ('i32')}}832  transform.num_associations %arg0 : (!transform.any_op) -> !transform.param<i32>833}834 835// -----836 837module attributes { transform.with_named_sequence } {838  transform.named_sequence @__transform_main(%arg0: !transform.any_op) {839    // expected-error @below {{unresolved matcher symbol @missing_symbol}}840    transform.collect_matching @missing_symbol in %arg0 : (!transform.any_op) -> !transform.any_op841    transform.yield842  }843}844 845// -----846 847module attributes { transform.with_named_sequence } {848  transform.named_sequence @__transform_main(%arg0: !transform.any_op) {849    // expected-error @below {{expected the matcher to take one operation handle argument}}850    transform.collect_matching @matcher in %arg0 : (!transform.any_op) -> !transform.any_op851    transform.yield852  }853 854  transform.named_sequence @matcher() {855    transform.yield856  }857}858 859// -----860 861 862module attributes { transform.with_named_sequence } {863  transform.named_sequence @__transform_main(%arg0: !transform.any_op) {864    // expected-error @below {{expected the matcher argument to be marked readonly}}865    transform.collect_matching @matcher in %arg0 : (!transform.any_op) -> !transform.any_op866    transform.yield867  }868 869  transform.named_sequence @matcher(%arg0: !transform.any_op) {870    transform.yield871  }872}873 874 875// -----876 877module attributes { transform.with_named_sequence } {878  transform.named_sequence @__transform_main(%arg0: !transform.any_op) {879    // expected-error @below {{expected the matcher to yield as many values as op has results (1), got 0}}880    transform.collect_matching @matcher in %arg0 : (!transform.any_op) -> !transform.any_op881    transform.yield882  }883 884  transform.named_sequence @matcher(%arg0: !transform.any_op {transform.readonly}) {885    transform.yield886  }887}888 889// -----890 891module attributes { transform.with_named_sequence } {892  transform.named_sequence @__transform_main(%arg0: !transform.any_op) {893    // expected-error @below {{mismatching type interfaces for matcher result and op result #0}}894    transform.collect_matching @matcher in %arg0 : (!transform.any_op) -> !transform.any_value895    transform.yield896  }897 898  transform.named_sequence @matcher(%arg0: !transform.any_op {transform.readonly}) -> !transform.any_op {899    transform.yield %arg0 : !transform.any_op900  }901}902 903// -----904 905module attributes { transform.with_named_sequence } {906  transform.named_sequence @match_matmul(%entry: !transform.any_op) -> () {907    %c3 = transform.param.constant 1 : i64 -> !transform.param<i64>908    // expected-error @below {{op operand #0 must be TransformHandleTypeInterface instance}}909    transform.print %c3 : !transform.param<i64>910    transform.yield911  }912}913 914// -----915 916module attributes { transform.with_named_sequence } {917  transform.named_sequence @__transform_main(%arg0: !transform.any_op) -> () {918    // Intentionally malformed func with no region. This shouldn't crash the919    // verifier of `with_named_sequence` that runs before we get to the920    // function.921    // expected-error @below {{requires one region}}922    "func.func"() : () -> ()923    transform.yield924  }925}926 927// -----928 929module attributes { transform.with_named_sequence } {930  transform.named_sequence @__transform_main(%arg0: !transform.any_op) -> () {931    // Intentionally malformed call with a region. This shouldn't crash the932    // verifier of `with_named_sequence` that runs before we get to the call.933    // expected-error @below {{requires zero regions}}934    "func.call"() <{935      function_type = () -> (),936      sym_name = "lambda_function"937    }> ({938    ^bb0:939      "func.return"() : () -> ()940    }) : () -> ()941    transform.yield942  }943}944 945// -----946 947module attributes { transform.with_named_sequence } {948  // Intentionally malformed sequence where the verifier should not crash.949  // expected-error @below {{ op expects argument attribute array to have the same number of elements as the number of function arguments, got 1, but expected 3}}950  "transform.named_sequence"() <{951    arg_attrs = [{transform.readonly}],952    function_type = (i1, tensor<f32>, tensor<f32>) -> (),953    sym_name = "print_message"954  }> ({}) : () -> ()955  "transform.named_sequence"() <{956    function_type = (!transform.any_op) -> (),957    sym_name = "reference_other_module"958  }> ({959  ^bb0(%arg0: !transform.any_op):960    "transform.include"(%arg0) <{target = @print_message}> : (!transform.any_op) -> ()961    "transform.yield"() : () -> ()962  }) : () -> ()963}964