<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body 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);" itemscope="" itemtype="https://schemas.microsoft.com/QuotedText">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<p class="x_MsoNormal" 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);" itemscope="" itemtype="https://schemas.microsoft.com/QuotedText">
<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="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> llvm-dev <llvm-dev-bounces@lists.llvm.org> on behalf of Przemyslaw Ossowski via llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Sent:</b> Thursday, February 11, 2021 11:30 AM<br>
<b>To:</b> llvm-dev <llvm-dev@lists.llvm.org><br>
<b>Subject:</b> [llvm-dev] LLVM AsmMatcher / AsmParser question - register number with dot modifier</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">
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
Hi,<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
<span> </span></p>
<p class="x_MsoNormal" 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 class="x_MsoNormal" 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 class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
<span> </span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
For example:<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
add x1, x2, x3<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
and sometimes:<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
add x1.M, x.2, x.3<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
<span>  <br>
</span></p>
<p class="x_MsoNormal" 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 class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
<span> </span>(outs REGCLASS:$x1),<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
<span> </span>(ins REGCLASS:$x2, REGCLASS:$x3),<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
“add\t\t${x1}.M, ${x2}, ${x3}"<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
<span> </span></p>
<p class="x_MsoNormal" 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 class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
<span> </span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
Should I define .M as separate operand for example:<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
(outs REGCLASS:$x1),<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
(ins REGCLASS:$x2, REGCLASS:$x3, REGMOD:$MOD)<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
“add\t\t${x1}.${MOD}, ${x2}, ${x3}"<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
<span> </span></p>
<p class="x_MsoNormal" 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 class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
<span> </span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
What approach should I take?<span></span></p>
<p class="x_MsoNormal" 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 class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
<span> </span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
Thanks,<span></span></p>
<p class="x_MsoNormal" style="margin:0in; font-size:11pt; font-family:"Calibri",sans-serif">
Przemek<span></span></p>
</div>
</div>
</div>
</body>
</html>