<div dir="ltr">It worked. I've spent quite some time debugging this. <div><br><div>Thank you!<div><br></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jan 11, 2022 at 4:44 PM Jason Eckhardt <<a href="mailto:jeckhardt@nvidia.com">jeckhardt@nvidia.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">




<div dir="ltr">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
One problem is that the predicate in your PatFrag is defined in terms of SDNode, which won't work for GISel. Try adding a GISelPredicateCode to do the equivalent test on Machine IR. See also
<a href="https://llvm.org/docs/GlobalISel/InstructionSelect.html" id="gmail-m_3251927444221664387LPNoLPOWALinkPreview" target="_blank">
https://llvm.org/docs/GlobalISel/InstructionSelect.html</a> (especially regarding SD imports).</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div id="gmail-m_3251927444221664387appendonsend"></div>
<hr style="display:inline-block;width:98%">
<div id="gmail-m_3251927444221664387divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>> on behalf of Adrian Tong via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Sent:</b> Monday, January 10, 2022 11:33 PM<br>
<b>To:</b> LLVM Developers Mailing List <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> [llvm-dev] AArch64 global isel</font>
<div> </div>
</div>
<div>
<table bgcolor="#FFEB9C" border="1">
<tbody>
<tr>
<td><font face="verdana" color="black" size="1"><b>External email: Use caution opening links or attachments</b>
</font></td>
</tr>
</tbody>
</table>
<br>
<div>
<div dir="ltr">
<div>Hi</div>
<div>I am writing a pattern to select ushr+or into usra on AArch64. I changed the following pattern from add to add_and_or_is_add. One test case test/CodeGen/AArch64/GlobalISel/combine-udiv.ll that uses global isel starts to fail and what was selected into
 usra is now selected into ushr+add. This only happens in global isel, how can i debug this ?<br>
</div>
<div><br>
</div>
<div>
<div>6471 defm USRA     : SIMDScalarRShiftDTied<   1, 0b00010, "usra",<br>
6472     TriOpFrag<(add_and_or_is_add /* changed from add */ node:$LHS,<br>
6473                    (AArch64vlshr node:$MHS, node:$RHS))>>;<br>
</div>
<div><br>
</div>
</div>
<div>6345 // Match add node and also treat an 'or' node is as an 'add' if the or'ed operands<br>
6346 // have no common bits.<br>
6347 def add_and_or_is_add : PatFrags<(ops node:$lhs, node:$rhs),<br>
6348                          [(add node:$lhs, node:$rhs), (or node:$lhs, node:$rhs)],[{<br>
6349    if (N->getOpcode() == ISD::ADD)<br>
6350      return true;<br>
6351    return CurDAG->haveNoCommonBitsSet(N->getOperand(0), N->getOperand(1));<br>
6352 }]>;<br>
</div>
<div><br>
</div>
<div>
<div>Thanks </div>
<div>-Adrian</div>
<div><br>
</div>
</div>
</div>
</div>
</div>
</div>

</blockquote></div>