<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/54162>54162</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [mlir][rewrite] Need a new API for function match and rewrite 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir:core
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            Mogball
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Mogball
      </td>
    </tr>
</table>

<pre>
    We used to have an API for passing values between the `match` and `rewrite` of a pattern. The old API was awkward to use and was removed at some point. The vast majority of patterns are written as `matchAndRewrite`, but with PDLL hailing a new rewrite paradigm, it might be time to introduce a new API for separate `match` and `rewrite`.

In theory, every conformant `matchAndRewrite` pattern can be separated into `match` and `rewrite`. Maybe it should look like this:

```
struct MyPattern : OpRewritePattern<FooOp> {
  auto match(FooOp op) const {
    // ...
    return make_match_result(/*bar=*/1, "baz");
  }

  void rewrite(int bar, StringRef baz, FooOp op, PatternRewriter &rewriter) const {
  }
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyFVM1uozAQfhpzGS0iEJJw4JAmG6lSu626K_VYGTwBNwZHtkmUffodO9B0pUpVEBgz8_3MjFNpcSlfEQaLApyGlp8QeA_r53vYawNHbq3sGzhxNaCFCt0ZsQfXIrBF0nFXt_SkDOHfDZ6NdOh39B44ZTuHpo_hD8VrJQLsmVvg58OZm8BIzCHdbxvs9ImEcAdWdwhHLXt3zT5x66Dj75oILh59xCYsg-BpHekijEnWuhcvH3JYuoFqcHCWroXn7cMDGZXKG-PQ4xlG4QRquJBN5-Ml8cmmdWQanCQ1JJbkGC2GGse8qUwWfab7pigxS7YsWV_v96GK2lw8F57QXKDWPYF1vHdfu5g8Q00dIlUTq_C69Dfc8MgvlEOubKsH6oXS-gBKHshYKy3L1p_V-Zpdr_BqnRlqB4-X51EBhcPTcZQ2brJss9P66ciyn8CWd9dMAD6QtquwdBUCQB9ZWni71NNPkQAs3dEFcRzf9gy6gRg7fsC3APNm0A7KEVoIX1fcsGxLC3qd-WqyNK34X7oTC8s-4Nly-9kiwElLMbWe0KiI4LEI4bczNBwvuIcAtIGb7g2MdkfzhugWI4j50taN92MxVTcSZSaKrOCRk05hyfK7TknD8i2tJmX5Fn6hPxX_jdx-6GsndX8tbWj4NMXRYFTZOncMXQ0lbWjwhyquNY32TqnT9PhxNPodayrmTlpLR5wW-Xy2SKO2nGOdFZjnWZ0izpaLfVItimqVL_bLpUjzVaR4hcp60VTroDtb19qgr3y-jWSZJmmaZPSb57NsFheF2Kezok4qITiucjZPsKNzGHslsTZNZMogqhoaSx-VtM7ePvq_oqZHHAkfdVNxpUYymrJWm3LcjIKZMjj5B8KUjNA">