xref: /llvm-project/mlir/test/Dialect/Transform/multi-arg-top-level-ops.mlir (revision 5468f8841353cd56350a6ebe6898d2563e5c34b0)
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