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

    <tr>
        <th>Summary</th>
        <td>
            --gen-rewriters not working in release 18.1.x but works on release 17.0.6 for apt releases and custom builds
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    I initially built the project from source and tested on tags `llvmorg-17.0.6` and `llvmorg-18.1.5` and they also have the same behaviour, prompting me to check the `apt`-based builds. I wanted to ensure it was not an issue just on my side.

## Setup

- **System:** Ubuntu 20.04 x86_64
- **Test file:** Writing a silly pass with unary operators on file `./test.td`
    ```tablegen
    include "mlir/Dialect/Complex/IR/ComplexOps.td"
    include "mlir/IR/PatternBase.td"
    
    def Test : Pat<
    (ReOp (ConjOp $z)),
    (ReOp $z)
    >;
    ```

## Case 1 (v17.0.6)

Clean installed the entire toolchain and installed MLIR with `sudo apt-get install libmlir-17-dev mlir-17-tools`. Nothing unexpected. The rewriter is generated as I was expecting it to.

- **Command:** `mlir-tblgen-17 ./test.td -I /usr/lib/llvm-17/include/ --gen-rewriters`
- **Output:**
    ```cpp
    /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
    |* *|
    |* Rewriters *|
    |* *|
    |* Automatically generated file, do not edit! *|
    |* *|
 \*===----------------------------------------------------------------------===*/

 /* Generated from:
        ./test.td:4
    */
    struct Test : public ::mlir::RewritePattern {
    Test(::mlir::MLIRContext *context)
 : ::mlir::RewritePattern("complex.re", 2, context, {"complex.re"}) {}
    ::mlir::LogicalResult matchAndRewrite(::mlir::Operation *op0,
 ::mlir::PatternRewriter &rewriter) const override {
        // Variables for capturing values and attributes used while creating ops
 ::mlir::Operation::operand_range z(op0->getOperands());
 ::llvm::SmallVector<::mlir::Operation *, 4> tblgen_ops;

        // Match
        tblgen_ops.push_back(op0);
        auto castedOp0 = ::llvm::dyn_cast<::mlir::complex::ReOp>(op0); (void)castedOp0;
 {
        auto *op1 = (*castedOp0.getODSOperands(0).begin()).getDefiningOp();
        if (!(op1)){
            return rewriter.notifyMatchFailure(castedOp0, [&](::mlir::Diagnostic &diag) {
            diag << "There's no operation that defines operand 0 of castedOp0";
            });
        }
 auto castedOp1 = ::llvm::dyn_cast<::mlir::complex::ConjOp>(op1); (void)castedOp1;
        if (!(castedOp1)){
            return rewriter.notifyMatchFailure(op1, [&](::mlir::Diagnostic &diag) {
 diag << "castedOp1 is not ::mlir::complex::ConjOp type";
 });
        }
        z = castedOp1.getODSOperands(0);
 tblgen_ops.push_back(op1);
        }

        // Rewrite
 auto odsLoc = rewriter.getFusedLoc({tblgen_ops[0]->getLoc(), tblgen_ops[1]->getLoc()}); (void)odsLoc;
 ::llvm::SmallVector<::mlir::Value, 4> tblgen_repl_values;
 ::mlir::complex::ReOp tblgen_ReOp_0;
        {
 ::llvm::SmallVector<::mlir::Value, 4> tblgen_values; (void)tblgen_values;
 ::llvm::SmallVector<::mlir::NamedAttribute, 4> tblgen_attrs; (void)tblgen_attrs;
        tblgen_values.push_back((*z.begin()));
 ::llvm::SmallVector<::mlir::Type, 4> tblgen_types; (void)tblgen_types;
 for (auto v: castedOp0.getODSResults(0)) {
 tblgen_types.push_back(v.getType());
        }
        tblgen_ReOp_0 = rewriter.create<::mlir::complex::ReOp>(odsLoc, tblgen_types, tblgen_values, tblgen_attrs);
        }

        for (auto v: ::llvm::SmallVector<::mlir::Value, 4>{ tblgen_ReOp_0.getODSResults(0) }) {
        tblgen_repl_values.push_back(v);
        }

 rewriter.replaceOp(op0, tblgen_repl_values);
        return ::mlir::success();
    };
    };

    void LLVM_ATTRIBUTE_UNUSED populateWithGenerated(::mlir::RewritePatternSet &patterns) {
 patterns.add<Test>(patterns.getContext());
    }
    ```

## Case 2 (v18.1.6)

Clean installed the entire toolchain and installed MLIR with `sudo apt-get install libmlir-18-dev mlir-18-tools`. Weird for a unary operator to be expecting 2 inputs.

- **Command:** `mlir-tblgen-18 ./test.td -I /usr/lib/llvm-18/include/ --gen-rewriters`
- **Output:**
 ```bash
    ./test.td:4:5: error: op 'complex.re' argument number mismatch: 1 in pattern vs. 2 in definition
    def Test : Pat<
 ^
    ```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8WFtv27gS_jXMy8CCRPmWBz84drwITnazSNLuY0BJE5utRAok5TT99QdDXe0q2Zy2OELgUOJlhjPffByOsFbuFeKKza7YbHshKnfQZvXJfRXGHv5TqRdhLhKdva5uQCrppMjzV0gqmTtwB4TS6C-YOng2ugCrK5MiCJWBQ-swA63Aib0FNg_z_Fhos59EiyAM5mwe-nHDjmUQBbO2wx3wFURuNRzEEb0sKwqEBA_iKHVlGN-Q9KJ0Uu2hQHAa0gOmX_1YNg9F6dg8nCTCYuY1zmwAN_AiFGnmNKCylUGQDl6EBaUdCAXS2grhS2UdKV-8gpUZBizcsnDd_PKY8Rge0FXl8PsEGF8zvn54tQ4LFq_rV_iUVMpVwMMgnMK35fxpPj2d8IjWwbPMsZ_zj5F-WwKsJIOXwlp4ke4AlRLmFXSJRjhtLClJU2nDAeM7snvgMjYPaxkAQF31nxNJjntUfZdUaV5lCIzzIpeG8d1WihxTx_huo4syx2-M727u-9e70tL6nL-3iJ_wt3AOjboSFs9n9K0Mn8Hvn8Vr-Fs4Fm8Gw_jyHu9K-r_R6otvTb8zfun_RgfW3X1HfM3iqxFTjDh0IyxCRGsdG4y2K9W_mxwJH8o6kefoEQqonDQEPZ2nByGVh24_5M_bm_vabWwe2irTIEo32aNrx0AuE7LZJFpMMjxC26YFLbkU_tLuQEioFH4rMXWYBfB4QDD4YqRDA9LCHhXBATMQ1iPcQj2YJkoHTgdjQN3oohAq61HH5qFXwCX5HtUkWsAAUjC5AcZ3lSUH5zKh3_xYTKIF47sGAozvYDKhua16trN1K_WucmXlOqEjvknLcujaHY2Kt_XfBB4JxH-gYnzRbNrjf_KRh_H1BDaMXzF-Bf6tW5iEzIaQWmy8SfiaWuef79vtvTXgjc_ryulCOJl6Gu395qOfbyDTnocwk47x6EOLk9ZDA_2W58QsfDdET-MR-KNX3mhPd52a9AzJKF5Phw7tV6R360yVup4EyirJZUpNFq89n_hWY_GGVIAtBlFNcxlfnk-h6Nto5fCbI6lp3ez5gaS9L4YW5TytmS8wSCTGN-B_uuU2XpnzYYst45e-Z7Ed8tGpuFu9Jyzco61yB4Vw6WGtskaJkS3ded6XWtGGdBn2LHg-stlBC1RgfN7GJCmWakUn3BGNkUTdQ3N2YbeDz8JIijcLz9pAKkpXGSKVo8grtJ7thHNGJpVDCxWdtC8HCsfUoPD0o0v7hobdXupXf6Sp7MkItUf4zvhSl-GExdd7dHd1n_X-8OzfkXo9mZiobj0UIs8_Y-q0obPkPfuR66Ysvoaa755I1XbdUWv8Sf457emnBmVlD0-JSL_Wqp9o2TyioiRFUGp0V4bA4u0P-mev6olGjCjfAKwF6l1Jp9tAlj-6tMwYv-xkDAx17mKvjIdRVGtCxl13MwOy-_ZhYHoSEyS4l6rzAw3a4rNUUu3vyubz-a7lc7125JWNGg-eq0OPQVcZ1Z1tgdJOPr96s--EzCsKrWW_Nwq92RXjczbbjgTLVoq90tYRm_B5JsW-DckfBFMneJNvKI15PCCJWlBW2ORahBl3EI4yFqnQQoNXCEE_w0An_sP-a-bejpmmJ4cTaES_BI06V2rBEb0JjuhdT_WjftFfXoVf89SZe3ozyTpv_4A5wL2WeOKdf3VJ83z3zuhkjsdFv8ybjBC9K22UcNqDYAARndlbnXqVOrPv0e2Ie291SsZdXA0IbXYVstm24dFmgM-e4WRQNDaoNdAAO7X4n6Xfz3RsnNOuwTJ_qg-U83Xf4b52NrWfwhG7_kYNO-UGhjjv-ilpf4kCs3V7gJ6LpZN1XGrbM3oW1SqdgK-m9u9n5P0L5-ijD6ZTdSnAxtVtexpRlEowvvRwPlISdn7m1OlQF1onVDBc8mSPR5pc6_VDkvBWaJ9g6DSmfAKD_8MpXAdGH1f1pvv3Bin9h9qJH-eEH8z2C8hmi6vTzY9aHgZZ7JjdBpF76oqP7KqzNK0iUvTpQ53SjjHDyIrN6XO-UVulKVo7koyQCm-9918Ju3B7-_nPp_Xj4_3N1afH66dPf316uN5CqcsqFw7_ke7Q3X9GzrPTW8QD0v1jXtZv9tSi7ddAZBmLN_4q4wHVdezRbdq7xhiyTy8Y_1bg4HWBYxlE_-cCx3JQ4FgOChz_oDSZB7c4K26B05DgoJTBQaqycvbnqhnLD1Uzlr-jmtF5IRF2cGE4vxPH6xnFMRpDEbsGXQLji-E9cgHC7KsClQNVFQkaKKT110QaH4FULYDgaANvoDpBlf5i9YEyG5tdj6DnIlvF2WV8KS5wFS2i2WIeTS-ji8MquozjZRiGuJiGyXIxn_P4MorSabx85uGMJxdyxUM-DWfRLFzy6SwKwgTjGBdZJBbLeTqfsWmIhZB5QPYOtNlf-JLr6pJzvrjIRYK59dVozhW-1PVYyttm2wuz8j5Kqr1l0zCX1tl-FSddjqszf_ns8EWbr74SRplqjr7MR_j_BklV9_oyatfni381IkvXfq4vu2llnS6aavJFZfLVwTm6Nq7rjG0v3aFKglQXDaBaXDV1cgIXbcgyvvMb_m8AAAD__zu9wic">