<div dir="ltr"><div>Thank you Jason,</div><div>that was very helpful!</div><div><br></div><div>Przemek<br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Feb 12, 2021 at 2:22 AM 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)">
<br>
</div>
<blockquote style="border-color:rgb(200,200,200);border-left:3px solid rgb(200,200,200);padding-left:1ex;margin-left:0.8ex;color:rgb(102,102,102)">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
What approach should I take?</p>
</div>
</blockquote>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
One way is to custom parse your operands-- take a look at AsmOperandClass and the related machinery in</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
include/llvm/Target/Target.td.<br>
</div>
<blockquote style="border-color:rgb(200,200,200);border-left:3px solid rgb(200,200,200);padding-left:1ex;margin-left:0.8ex;color:rgb(102,102,102)">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
Is there any example of such a case in any Target?</div>
</blockquote>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
A number of targets need similar sorts of handling, but AArch64 seems to be the closest example to your case.</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
In particular, the Neon vector register handling might be a good place to start. E.g., the VectorReg64AsmOperand+V64</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
definitions in AArchRegisterInfo.td (and users) and the corresponding parse code in AArch64AsmParser::tryParseNeonVectorRegister.<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div id="gmail-m_156267376417411089appendonsend"></div>
<hr style="display:inline-block;width:98%">
<div id="gmail-m_156267376417411089divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" face="Calibri, sans-serif" 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 Przemyslaw Ossowski via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Sent:</b> Thursday, February 11, 2021 11:30 AM<br>
<b>To:</b> llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
<b>Subject:</b> [llvm-dev] LLVM AsmMatcher / AsmParser question - register number with dot modifier</font>
<div> </div>
</div>
<div>
<table border="1" bgcolor="#FFEB9C">
<tbody>
<tr>
<td><font size="1" face="verdana" color="black"><b>External email: Use caution opening links or attachments</b>
</font></td>
</tr>
</tbody>
</table>
<br>
<div>
<div dir="ltr">
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
Hi,<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
<span> </span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
I am trying to implement support for asm matching for instruction which uses three registers (operands).<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
And sometimes the register could have a suffix like .M.<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
<span> </span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
For example:<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
add x1, x2, x3<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
and sometimes:<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
add x1.M, x.2, x.3<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
<span>  <br>
</span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
For the second case I’ve defined instruction as follows:<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
<span> </span>(outs REGCLASS:$x1),<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
<span> </span>(ins REGCLASS:$x2, REGCLASS:$x3),<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
“add\t\t${x1}.M, ${x2}, ${x3}"<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
<span> </span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
But AsmParser doesn’t recognize the case with .M returning "invalid operand for instruction".<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
<span> </span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
Should I define .M as separate operand for example:<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
(outs REGCLASS:$x1),<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
(ins REGCLASS:$x2, REGCLASS:$x3, REGMOD:$MOD)<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
“add\t\t${x1}.${MOD}, ${x2}, ${x3}"<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
<span> </span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
But in such case it still doesn’t recognize “x1.M”, because as I understand it separates operands just with “,” (comma).<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
<span> </span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
What approach should I take?<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
Is there any example of such a case in any Target?<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
<span> </span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
Thanks,<span></span></p>
<p style="margin:0in;font-size:11pt;font-family:"Calibri",sans-serif">
Przemek<span></span></p>
</div>
</div>
</div>
</div>

</blockquote></div>