<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">