<div><font><br></font></div><div><includetail><div> For the custom lowering method, removing the extra SDNPHasChain resolved the issue. However I still don't understand why the first pattern matching method didn't work</div><div> </div><div style="font:Verdana normal 14px;color:#000;"><div style="FONT-SIZE: 12px;FONT-FAMILY: Arial Narrow;padding:2px 0 2px 0;">------------------ Original ------------------</div><div style="FONT-SIZE: 12px;background:#efefef;padding:8px;"><div id="menu_sender"><b>From: </b> "llvm-dev"<llvm-dev@lists.llvm.org>;</div><div><b>Date: </b> Thu, Apr 1, 2021 11:10 AM</div><div><b>To: </b> "llvm-dev"<llvm-dev@lists.llvm.org>; <wbr></div><div></div><div><b>Subject: </b> [llvm-dev] Matching BlockAddress DAG Nodes in TableGen</div></div><div> </div><div style="position:relative;"><div id="tmpcontent_res"></div><div><font>Hi:</font></div><div><font><br></font></div><div><font>I've written the following TableGen pattern matching code in my .td:</font></div><div><font><br></font></div><div><font>```</font></div><div><font>def : Pat<(set GP64:$dst,blockaddress:$tba),(i64 (MOVR8 tblockaddress:$tba))>;</font></div><div><font>```</font></div><div>Which I assume means it would match the following DAG Node:</div><div><br></div><div>````</div><div>i64 XX = BlockAddress(@func,@BB) 0</div><div>````</div><div><br></div><div>but TableGen asserted out with </div><div><br></div><div>```</div><div>Assertion failed: (getOperator()->isSubClassOf("SDNodeXForm") && "Unknown node type!"), function ApplyTypeConstraints, file LLVM/llvm/utils/TableGen/CodeGenDAGPatterns.cpp, line 2618.</div><div>```</div><div><br></div><div><br></div><div>Then I tried to custom lower BlockAddress nodes with custom ISD, yielding the following DAG Node:</div><div><br></div><div>```</div><div>t162: i64 = LOADBLOCKADDRESS TargetBlockAddress:i64<@main, %odd.i18> 0</div><div>```</div><div><br></div><div>then I tried to match this DAG Node in TableGen:</div><div><br></div><div><br></div><div>```</div><div><div>def SDT_LOADBLOCKADDRESS : SDTypeProfile<1,1,[SDTCisInt<0>,SDTCisVT<1,i64>]>;</div><div>def _LOADBLOCKADDRESS : SDNode<"CUSTOMISD::LOADBLOCKADDRESS",SDT_LOADBLOCKADDRESS,[SDNPHasChain]>;</div></div><div>...</div><div>def : Pat<(i64 (_LOADBLOCKADDRESS tblockaddress:$tba)),(i64 (MOVXI8 tblockaddress:$tba))>;</div><div>```</div><div><br></div><div>Which failed when matching opcode OPC_RecordChild1</div><div>```</div><div><div>unsigned ChildNo = Opcode-OPC_RecordChild0;</div><div>      if (ChildNo >= N.getNumOperands())</div><div>        break;  // Match fails if out of range child #.</div></div><div>```</div><div><br></div><div>due to ChildNo (1) >= N.getNumOperands()</div><div><br></div><div><br></div><div>Zhang</div><div></div></div></div><!--<![endif]--></includetail></div>