1// RUN: mlir-opt %s --pass-pipeline="builtin.module(transform-interpreter{\ 2// RUN: debug-bind-trailing-args=func.func,func.return})" \ 3// RUN: --split-input-file --verify-diagnostics 4 5module attributes {transform.with_named_sequence} { 6 transform.named_sequence @__transform_main( 7 %arg0: !transform.any_op, %arg1: !transform.any_op, 8 %arg2: !transform.any_op) { 9 transform.debug.emit_remark_at %arg1, "first extra" : !transform.any_op 10 transform.debug.emit_remark_at %arg2, "second extra" : !transform.any_op 11 transform.yield 12 } 13} 14 15// expected-remark @below {{first extra}} 16func.func @foo() { 17 // expected-remark @below {{second extra}} 18 return 19} 20 21// expected-remark @below {{first extra}} 22func.func @bar(%arg0: i1) { 23 cf.cond_br %arg0, ^bb1, ^bb2 24^bb1: 25 // expected-remark @below {{second extra}} 26 return 27^bb2: 28 // expected-remark @below {{second extra}} 29 return 30} 31 32// ----- 33 34module attributes {transform.with_named_sequence} { 35 transform.named_sequence @__transform_main( 36 %arg0: !transform.any_op, %arg1: !transform.any_op, 37 %arg2: !transform.param<i64>) { 38 // expected-error @above {{wrong kind of value provided for top-level parameter}} 39 transform.yield 40 } 41} 42 43func.func @foo() { 44 return 45} 46 47// ----- 48 49module attributes {transform.with_named_sequence} { 50 transform.named_sequence @__transform_main( 51 %arg0: !transform.any_op, %arg1: !transform.any_op, 52 %arg2: !transform.any_value) { 53 // expected-error @above {{wrong kind of value provided for the top-level value handle}} 54 transform.yield 55 } 56} 57 58func.func @foo() { 59 return 60} 61 62// ----- 63 64 65module attributes {transform.with_named_sequence} { 66 // expected-error @below {{operation expects 1 extra value bindings, but 2 were provided to the interpreter}} 67 transform.named_sequence @__transform_main( 68 %arg0: !transform.any_op, %arg1: !transform.any_op) { 69 transform.yield 70 } 71} 72 73// ----- 74 75module attributes {transform.with_named_sequence} { 76 transform.named_sequence @__transform_main( 77 %arg0: !transform.any_op, %arg1: !transform.any_op, 78 %arg2: !transform.any_op) { 79 transform.sequence %arg0, %arg1, %arg2 : !transform.any_op, !transform.any_op, !transform.any_op failures(propagate) { 80 ^bb0(%arg3: !transform.any_op, %arg4: !transform.any_op, %arg5: !transform.any_op): 81 transform.debug.emit_remark_at %arg4, "first extra" : !transform.any_op 82 transform.debug.emit_remark_at %arg5, "second extra" : !transform.any_op 83 } 84 transform.yield 85 } 86} 87 88// expected-remark @below {{first extra}} 89func.func @foo() { 90 // expected-remark @below {{second extra}} 91 return 92} 93 94// expected-remark @below {{first extra}} 95func.func @bar(%arg0: i1) { 96 cf.cond_br %arg0, ^bb1, ^bb2 97^bb1: 98 // expected-remark @below {{second extra}} 99 return 100^bb2: 101 // expected-remark @below {{second extra}} 102 return 103} 104