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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR] [tablegen] assertion failure in case of DRR with custom builder with native MLIR properties
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          J-MR-T
      </td>
    </tr>
</table>

<pre>
    This tablegen file ([find AMD64Ops.td here](https://github.com/J-MR-T/MoNaCo/blob/dd707eec885862329b9706e1ba4d1f9a11aa5c52/include/AMD64/AMD64Ops.td), find the generated definition for MOV64ri below the console output):
```tablegen
include "mlir/IR/PatternBase.td"
include "mlir/Dialect/Arith/IR/ArithOps.td"
include "AMD64/AMD64Ops.td"

def MovExamplePat : Pat<(Arith_ConstantOp I64Attr:$attr), (MOV64ri $attr)>;
```
leads to this assertion failure:

```console
mlir-tblgen: /home/schlepp/programming/Libs/Cpp/llvm-project/llvm/include/llvm/ADT/PointerUnion.h:156: T llvm::PointerUnion<PT>::get() const [with T = mlir::tblgen::NamedTypeConstraint*; PTs = {mlir::tblgen::NamedAttribute*, mlir::tblgen::N
amedProperty*, mlir::tblgen::NamedTypeConstraint*}]: Assertion `isa<T>(*this) && "Invalid accessor called"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /home/schlepp/programming/Libs/Cpp/llvm-project/buildTop/bin/mlir-tblgen -gen-rewriters -I /home/schlepp/programming/Workspaces/Cpp/MoNaCo/include/AMD64 -I/home/schlepp/programming/Libs/Cpp/llvm-project/llvm/inclu
de -I/home/schlepp/programming/Libs/Cpp/llvm-project/buildTop/include -I/home/schlepp/programming/Libs/Cpp/llvm-project/mlir/include -I/home/schlepp/programming/Libs/Cpp/llvm-project/buildTop/tools/mlir/include -I/home/schlepp/programming/W
orkspaces/Cpp/MoNaCo/include -I/home/schlepp/programming/Workspaces/Cpp/MoNaCo/build/include -I/home/schlepp/programming/Workspaces/Cpp/MoNaCo/lib/fadec -I/home/schlepp/programming/Workspaces/Cpp/MoNaCo/lib/fadec/build /home/schlepp/program
ming/Workspaces/Cpp/MoNaCo/include/AMD64/Lowerings.td --write-if-changed -o /home/schlepp/programming/Workspaces/Cpp/MoNaCo/build/include/AMD64/Lowerings.cpp.inc

 #0 0x00005566c025b35e llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/schlepp/programming/Libs/Cpp/llvm-project/llvm/lib/Support/Unix/Signals.inc:602:22
 #1 0x00005566c025b730 PrintStackTraceSignalHandler(void*) /home/schlepp/programming/Libs/Cpp/llvm-project/llvm/lib/Support/Unix/Signals.inc:676:1
 #2 0x00005566c0258de1 llvm::sys::RunSignalHandlers() /home/schlepp/programming/Libs/Cpp/llvm-project/llvm/lib/Support/Signals.cpp:104:20
 #3 0x00005566c025acbc SignalHandler(int) /home/schlepp/programming/Libs/Cpp/llvm-project/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x00007fc91a631f50 (/usr/lib/libc.so.6+0x38f50)
 #5 0x00007fc91a6808ec (/usr/lib/libc.so.6+0x878ec)
 #6 0x00007fc91a631ea8 raise (/usr/lib/libc.so.6+0x38ea8)
 #7 0x00007fc91a61b53d abort (/usr/lib/libc.so.6+0x2253d)
 #8 0x00007fc91a61b45c (/usr/lib/libc.so.6+0x2245c)
 #9 0x00007fc91a62a9f6 (/usr/lib/libc.so.6+0x319f6)
#10 0x00005566c012218c mlir::tblgen::NamedTypeConstraint* llvm::PointerUnion<mlir::tblgen::NamedAttribute*, mlir::tblgen::NamedProperty*, mlir::tblgen::NamedTypeConstraint*>::get<mlir::tblgen::NamedTypeConstraint*>() const /home/schlepp/pro
gramming/Libs/Cpp/llvm-project/llvm/include/llvm/ADT/PointerUnion.h:157:19
#11 0x00005566c011d021 (anonymous namespace)::PatternEmitter::createAggregateLocalVarsForOpArgs(mlir::tblgen::DagNode, llvm::DenseMap<unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, llvm::DenseM
apInfo<unsigned int, void>, llvm::detail::DenseMapPair<unsigned int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&, int) /home/schlepp/programming/Libs/Cpp/llvm-project/mlir/tools/mlir-tblgen/Rewrit
erGen.cpp:1647:61
#12 0x00005566c011bc8d (anonymous namespace)::PatternEmitter::handleOpCreation(mlir::tblgen::DagNode, int, int) /home/schlepp/programming/Libs/Cpp/llvm-project/mlir/tools/mlir-tblgen/RewriterGen.cpp:1489:12
#13 0x00005566c0119806 (anonymous namespace)::PatternEmitter::handleResultPattern(mlir::tblgen::DagNode, int, int) /home/schlepp/programming/Libs/Cpp/llvm-project/mlir/tools/mlir-tblgen/RewriterGen.cpp:1125:27
#14 0x00005566c01193f3 (anonymous namespace)::PatternEmitter::emitRewriteLogic() /home/schlepp/programming/Libs/Cpp/llvm-project/mlir/tools/mlir-tblgen/RewriterGen.cpp:1082:13
#15 0x00005566c0118c8d (anonymous namespace)::PatternEmitter::emit(llvm::StringRef) /home/schlepp/programming/Libs/Cpp/llvm-project/mlir/tools/mlir-tblgen/RewriterGen.cpp:1007:13
#16 0x00005566c011e1b1 emitRewriters(llvm::RecordKeeper const&, llvm::raw_ostream&) /home/schlepp/programming/Libs/Cpp/llvm-project/mlir/tools/mlir-tblgen/RewriterGen.cpp:1789:5
#17 0x00005566c011e417 genRewriters::'lambda'(llvm::RecordKeeper const&, genRewriters::raw_ostream&)::operator()(llvm::RecordKeeper const, genRewriters::raw_ostream) const /home/schlepp/programming/Libs/Cpp/llvm-project/mlir/tools/mlir-tblg
en/RewriterGen.cpp:1808:27
#18 0x00005566c011ebdb bool std::__invoke_impl<bool, genRewriters::'lambda'(llvm::RecordKeeper const&, genRewriters::raw_ostream&)&, llvm::RecordKeeper const, genRewriters::raw_ostream>(std::__invoke_other, genRewriters::'lambda'(llvm::Reco
rdKeeper const&, genRewriters::raw_ostream&)&, llvm::RecordKeeper const&&, genRewriters::raw_ostream&&) /usr/include/c++/12.2.1/bits/invoke.h:61:70
#19 0x00005566c011e9ef std::enable_if<is_invocable_r_v<bool, genRewriters::'lambda'(llvm::RecordKeeper const&, genRewriters::raw_ostream&)&, llvm::RecordKeeper const, genRewriters::raw_ostream>, std::enable_if>::type std::__invoke_r<bool, g
enRewriters::'lambda'(llvm::RecordKeeper const&, genRewriters::raw_ostream&)&, llvm::RecordKeeper const, genRewriters::raw_ostream>(bool&&, genRewriters::'lambda'(llvm::RecordKeeper const&, genRewriters::raw_ostream&)&...) /usr/include/c++/
12.2.1/bits/invoke.h:117:5
#20 0x00005566c011e7e4 std::_Function_handler<bool (llvm::RecordKeeper const&, llvm::raw_ostream&), genRewriters::'lambda'(llvm::RecordKeeper const&, llvm::raw_ostream&)>::_M_invoke(std::_Any_data const&, llvm::RecordKeeper const&, llvm::ra
w_ostream&) /usr/include/c++/12.2.1/bits/std_function.h:292:7
#21 0x00005566c02c4227 std::function<bool (llvm::RecordKeeper const&, llvm::raw_ostream&)>::operator()(llvm::RecordKeeper const&, llvm::raw_ostream&) const /usr/include/c++/12.2.1/bits/std_function.h:592:7
#22 0x00005566c02c40ab mlir::GenInfo::invoke(llvm::RecordKeeper const&, llvm::raw_ostream&) const /home/schlepp/programming/Libs/Cpp/llvm-project/mlir/include/mlir/TableGen/GenInfo.h:40:3
#23 0x00005566c02c2db0 mlirTableGenMain(llvm::raw_ostream&, llvm::RecordKeeper&) /home/schlepp/programming/Libs/Cpp/llvm-project/mlir/lib/Tools/mlir-tblgen/MlirTblgenMain.cpp:137:39
#24 0x00005566c02c6fa5 bool std::__invoke_impl<bool, bool (*&)(llvm::raw_ostream&, llvm::RecordKeeper&), llvm::raw_ostream&, llvm::RecordKeeper&>(std::__invoke_other, bool (*&)(llvm::raw_ostream&, llvm::RecordKeeper&), llvm::raw_ostream&, l
lvm::RecordKeeper&) /usr/include/c++/12.2.1/bits/invoke.h:61:70
#25 0x00005566c02c62a8 std::enable_if<is_invocable_r_v<bool, bool (*&)(llvm::raw_ostream&, llvm::RecordKeeper&), llvm::raw_ostream&, llvm::RecordKeeper&>, bool>::type std::__invoke_r<bool, bool (*&)(llvm::raw_ostream&, llvm::RecordKeeper&),
 llvm::raw_ostream&, llvm::RecordKeeper&>(bool (*&)(llvm::raw_ostream&, llvm::RecordKeeper&), llvm::raw_ostream&, llvm::RecordKeeper&) /usr/include/c++/12.2.1/bits/invoke.h:117:5
#26 0x00005566c02c563d std::_Function_handler<bool (llvm::raw_ostream&, llvm::RecordKeeper&), bool (*)(llvm::raw_ostream&, llvm::RecordKeeper&)>::_M_invoke(std::_Any_data const&, llvm::raw_ostream&, llvm::RecordKeeper&) /usr/include/c++/12.
2.1/bits/std_function.h:292:7
#27 0x00005566c02cdf35 std::function<bool (llvm::raw_ostream&, llvm::RecordKeeper&)>::operator()(llvm::raw_ostream&, llvm::RecordKeeper&) const /usr/include/c++/12.2.1/bits/std_function.h:592:7
#28 0x00005566c02cbf18 llvm::TableGenMain(char const*, std::function<bool (llvm::raw_ostream&, llvm::RecordKeeper&)>) /home/schlepp/programming/Libs/Cpp/llvm-project/llvm/lib/TableGen/Main.cpp:139:12
#29 0x00005566c02c314c mlir::MlirTblgenMain(int, char**) /home/schlepp/programming/Libs/Cpp/llvm-project/mlir/lib/Tools/mlir-tblgen/MlirTblgenMain.cpp:157:22
#30 0x00005566c003e15c main /home/schlepp/programming/Libs/Cpp/llvm-project/mlir/tools/mlir-tblgen/mlir-tblgen.cpp:27:67
#31 0x00007fc91a61c790 (/usr/lib/libc.so.6+0x23790)
#32 0x00007fc91a61c84a __libc_start_main (/usr/lib/libc.so.6+0x2384a)
#33 0x00005566bff85e55 _start (/home/schlepp/programming/Libs/Cpp/llvm-project/buildTop/bin/mlir-tblgen+0x271e55)
```



MOV64ri as promised:
```tablegen
def MOV64ri {   // Op AMD64_Op Instruction
 Dialect opDialect = AMD64_Dialect;
  string opName = "MOV64ri";
 string cppNamespace = "::amd64";
  string summary = "";
  string description = "";
  dag arguments = (ins InstructionInfoProp:$instructionInfoImpl);
  dag results = (outs gpr64:$dst);
  dag regions = (region);
  dag successors = (successor);
  list<OpBuilder> builders = [anonymous_474];
  bit skipDefaultBuilders = 0;
  string assemblyFormat = ?;
  bit hasCustomAssemblyFormat = 0;
  bit hasVerifier = 0;
  bit hasRegionVerifier = 0;
  bit hasCanonicalizer = 0;
  bit hasCanonicalizeMethod = 0;
  bit hasFolder = 0;
  list<Trait> traits = [Pure, HasImm, InstructionOpInterface];
  string extraClassDeclaration = "static constexpr FeMnem getFeMnemonic() { return FE_MOV64ri; }InstructionInfo& instructionInfo();";
  string extraClassDefinition = "InstructionInfo& $cppClass::instructionInfo() { return this->getProperties().instructionInfoImpl; }";
  dag operands = (ins);
}
```

The corresponding builder (`anonymouse_474`):
```tablegen
def anonymous_474 {     // OpBuilder
  dag dagParams = (ins "int64_t":$immArg);
  code body = [{
          $_state.getOrAddProperties<InstructionInfo>().imm = immArg;
          build($_builder, $_state);
 }];
}
```

The definition of the instruction info struct property can be found [here in tablegen](https://github.com/J-MR-T/MoNaCo/blob/dd707eec885862329b9706e1ba4d1f9a11aa5c52/include/AMD64/AMD64Ops.td#L178-L184) and [here in C++](https://github.com/J-MR-T/MoNaCo/blob/dd707eec885862329b9706e1ba4d1f9a11aa5c52/include/AMD64/AMD64Types.h#L83-L116).

I suspect that the whole pattern, just using `$attr` as the argument is wrong, but since it's an assertion failure instead of a proper error message, and said assertion failure requests a bug report, here I am ^^. I would also welcome any suggestions, if anything I'm doing here is a terrible idea :).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUW1tzo7qy_jXKi8ouEFc_5MGx47V9TjJJZbLXfnQJaLDWAOJIYpKcX79LAmwgTpyLM2tWKpXYILW6v76CWlRKlpUA58i7QN7yjNZqy8X5_0yu7yb3ZxFPns7vt0xiRaMcMihxynLAiITIu0hZmeD59dJ3byo5VQneggDkLREJt0pVEjlzRFaIrDKmtnU0jXmByKohjcjqmn-jC47IKsp5hMgqSQIrAIjD0At94pBZNAssH-yIuomdzqhtU-rFHkFkxco4rxNAZGWW7_43bCAyQ2SBDXdqCziDEgRVkOAEUlYyxXiJUy7w9c2fvisYjiDnD2ZozEvJc8C8VlWtNCFnjqwlsubIt5rfDojmcssIRoQUOROIrNZ3iKxuqVIgygsqwTBEXhq9ZDSHWGkBBFPbbr750knzfPJBodthzd8EUnzNf14-0qLK4ZYqjJw5vqUKOQtEQkN_s-ClVLRUNxVe--5cKWE05lL9qQERkbBDqXfDuUTOxQiX5msONJFYcay00VApQTRwU5bXAvZwDie3uDdXNTQTFeUaZGeOEVlteaF1LeNtDlWFyKoSPBO0KFiZIbK6YpFEZLUwt_L8ZzGpBP-rgVV_HRhMe2G-1CZ4y1mpQPy7ZLycbpEztz1fr3mPzTBnjpx5fwxyFrf3Rnx9JwOlHYHMjN0ojLyLB6a2-B4jZ4mNhs24nSzImX-jBST3TxUY8AVlpUJkjpwLfHsvzTwUXLwyVWuJRbUCPYssXlqlQVJPuBW8AqGeXh9_mKtgqb3ZmeP5TpHIt5ikyFkYGLT0c61qDQIiPiK-ts91-ZPmLME0jkFKLnBM8xyMjZLA2AIk04bF26vL-fdLLOuoYApTHNUZFlBxobQVvRJGWj2O1M2krEEbA6ZlgjuXMa4tqNziiMY_lKAxtMt_VzT-gZO6qHamaU2x-bltbAxTkdUFlEp-3hijmuXJPdd3IlYisuqZOp5kUE4EPAimQEg8Wb9hsf9w8UNWNIb9kruoOoqReLI-nSd1QebTRHuIdMr6LMk2sp6KXI9DxXkuP7bCfxrEjqvrbdReoWP4PSG9nOncnNIE4lPS6jh9zcjbdPBuU9ca5Q8gWJmZsmQyMU41Yekk3tIygwRP-Ce9awTzwaXjqpqyMu5nPIyIY2Hr0bIsy_N8P7aIFzke9PKNfJJt4hGsVCZA3euIhUi4HyTow4ZLJYAWJuwusAnZs9Nky0ZP3-tKx2FEVv8u2aO-wLKS5tLI5Mx9iyBn3pUdWjB7LFjgWHgkRUPjX7RMchCIhD85S0xq-qWsBzrL23vOyYjzMAH7kEru6nIggGzz_5ew3vEcVzo52Zar4bb2TDsjpmkcxXiM7y83C9d2hti6LZtBGs9s6jt26lnmAYKsail2ZHMWxVPJpz4iF9ajE6aepUvNHRlvSCa0QoiPkgmDUIeaHhl_zA3QEAvKJLyBJ6DhgFgwJGZHnpNgGuni5RgxQjwnGRALx8Rc77iAhLjeUMDZkAyhs9Q_Lpo9S_0dGe3KwyBlE2KH8buKx5cr6M9Xt5-ta_sF_Kv8HJw6KPkP-1WD41c9ogT6b09Xw7hr24lFbK1yWvLyqeC1xCUtwGSy9pHWmbdPqJcF0_-ba7EAqmCeZQIyquCKxzT_kwq54uKmmotMR7vDYC1p9o1r3hc9tS-hlHBNK-Qs6tK8ZUiaLLXAUiXNmM0mfny07eZLRCWLN1Lp7ImcRbylYjBYX9hoVehavLmt1dEbQfOcx1Rx0bvfDBmz1T4gVesy5QcYNGlpPDMBRVk-FO6Wajz-bgHNb2OSpywH2kK3X_d2D-ZkdWceVRocQfwBZZeofFcbqG_vDZSMDDSKw-QjBro1ae2mWmhD1cHkDfbYKuRX4TFAwg21MDbZI-GMkJiFlv9xJO5A1rlq7__uYNjE0wVMsAfDHYPhpM5HwICCqXbBK56x-CRF2XvFs0JdDtvOXjxvJF74QavX4g2K_-8mgNxB-jdIaQUjKf2RlGBHNu5pxNTIe97vIOYi-V-ACsQgYL38bPOrZQyM13p7EYOxiK4d4AzKvYSGb0SCnBZRQhEJ3ibzcxrPZG8u61LHRH1j2UeJH6V8pHz5JLBtTngB3tAKR3EgHOMbJRGOOM_7aZSVP_kP2LCiypGz0HcPy_k1Whjb6EdQN6Xjc4m42oL4gCwNfl8qkf9mep2bNo8Y-1I2RuTC_K5sMiVT27z5VNKM0dKbitbX5VFg7Q1iNjaIGaR7W4CSRjlsWIqcBZMGxthcEZuf_2DTWByUsH1SUU8VHPAG0Ze3c7t_lNRhw_7LlvZV7E-n06M22yD6iuXadjBIFcQaW24Abk9vq7qMdeG62bYvaBr14U-nyFNh99oSnS1urlvzG4Szefm0SaiiL5B704oNjgey_9vDilTJJm1RNioiM12X7bMNGb2ljF1Cgr2Kurmn00wH2ztz-NGiaJfBPwGONwaHjMGxaNR7t_IHlM0Ds_6yM4JTCXKyTZ_9hXsdSP8wpUjLu5HbtZAz3xexZPQqNSZJZBmxu_nXlJVHXsAfRuGUFWzz5u7-YB17rZk1XzSrXa3l6PDk7F8VEXckqJ9S742lVucO5oWbPzbh9-Hxukm8NvdYEfVLuWx7Hl7X-0lKIuKNFUdo-O6S6PdRYcPLe8qbE_PevjD_hBH-HmB-wsaeFS_-yMY830neW7y8X-4Bjp8C8VMFyolBb1B9Z2kSjBSQpI73xtLkg1C9UpS8E5AvKUfCESBRaoc9NkbZOd7SXdUxHzxQnRi6026o9mqUQe4evTsmsxEYju32t-SGFUC39bvAzS7D_CSb7B8uRMyeFdkLM2qCsBywvRgXlJVf-bKv961ljJitir3F7XoYul3YOJgd360mTjCz-tunu4aCHZnQpXiz0dM2UlGhNq2sxwiHLh0Q7leqUZqGHngebki21L6oP63hJ7DB8_YMDZs_n__tekepxJXgBZNgHPK1jlrTudq1nAYXGOOm-Q_fVE2v8eamwutSKlE3Lt0k8raRFvOq-4ScZTuha7LtelYxbrbgMK--0QKarktC2lURIfuR7cC4MiPNu_pueLshVyS-O5jSzZF1UVDxtBt-aEwCMhasajorD41LaLZvQGyHhKyUfQT0U82t4KaDkbhseGOti3gdtQYkhdk42hHktZI4q4TvNjQSqQ7NyRgvd3Oar8-Hybpt-tyN3F0ZDs6ZVMhZ3FQX2up0OXGJo-ZjO9W72G2VbNzANb2ou-kRU1j-YNUSUlrn6qI_03qONJUSiih_WnFR0MY4kLMa0dtSuail4sX8-Wjr-dg_QbCUgXjp_p2B6NiohRaSxTRn__-2Qdegtjx5aeSKaxye3W3RvheUKY10s8vc4XxbC7M_-C8q10WhP_Xs66ZalwpESmMYqqCFFh6VoIucSrmEOKeC9s1ZKqpY3GRleKwEXsF1CQXOQDWftFjdhl1wgQWoWpR4dbnp3NG5wChYjuwdER-z8aWwNbBDntZncncIoOXxAG1E3LiqzPjuZceBxfocqy2TE-RcZqDa1hQGbXvY9JBPNmI993ZTkZVJ39n7fqPnvBx7780ZBiFAVrxMtNytR5nc4Fs7fwLjUL71hiMOOiAP_LANy73A3HlwT4yEZrdU0GIQtBAhrFS-u1Ft_CQuK4q5yIaRIeYJ4IgnT515omB3r_tBxNVZT8E0A3Uj5knSQ91ZjFXate1MWVEYqu26zjPCbWNnqBdowWsOQrTrDVjtOuTfrJzeCRSemr70nm1gVqYcN191vjT9TTimJY4Ap7wuEw3GFoSetTuR8zscuHGu7CCcXNmhq72CDhldtA8AfyOf908VyOlWMxo6kyvb1pX8tK-cNZa1rHTdoLZUGc08bHkOuOq6Kxb4r1oqXEvtVsZ1mvMwvqXLGz2hS9SYSfwguC63FjiqFZasjAEzhUggMS2fn4sxVgA00UZBW9VjEIILXICUNDPRWeMqKUsOzBfwfzVIJQcnKPQco4Q1pgVG3iXyLqd4jR94nSeY5pLjB8hjXgCm5ROWdZaB1GSlaRLRbv-ktlrcNSJBgROuPzdq1SspEIJFOWCWAMVGqbPpWXLuJDNnRs_g3PZDJwwD1_bOtue260Ayo3ZgU8_2PCt2UxpZJIB4ZoWp65yxc2IRx_JsYluOZXtTGnphYiWhRSwvJTMXuRYUlOVTXbZOucjOzHGPc5_4gXuW0whyac6xEVLCAzY3daDxlmfi3JS6UZ1J5Fo6Gco9FcVUbg7AXV-t75BnQk7Puw6qC8dUglbX8u4Om1M_sakcdgHXXCupYj8Ba7qdQzOQZ7XIzz9-tMWI-98AAAD__66JJSQ">