<div dir="ltr"><font face="arial, helvetica, sans-serif">Hello everyone.</font><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">I apologise for the sizeable delay in sending this.</font></div>
<div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">The BoF was attended by quite a lot of people and there was general agreement that tablegen needs improvement in some shape of form. However there are many divergent ideas as to how to go about this improvement. Of course this is completely natural, tablegen being a versatile tool used by many different people for many different purposes.</font></div>
<div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Part of the attendees focused on missing features. Feature requests include:</font></div><div><font face="arial, helvetica, sans-serif"><br>
</font></div><div><span id="docs-internal-guid-7226603c-dc43-3429-0930-eb5410f51a17"><font face="arial, helvetica, sans-serif"><ol style="margin-top:0pt;margin-bottom:0pt"><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline">
<p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">support for vector literals</span></p></li><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline">
<p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">support for instruction/patterns with multiple outputs</span></p>
</li><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline"><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">support complex transforms where types of input and output differ</span></p>
</li><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline"><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">remove need of magic vars in complex patterns</span></p>
</li><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline"><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">improve support for permutations of operands</span></p>
</li><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline"><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">ability to implement DAG combines in tablegen</span></p>
</li><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline"><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">auto detect/infer constraints</span></p>
</li><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline"><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">add support or missing patterns and/or selectable insts</span></p>
</li><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline"><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">extend tablegen unit tests to go beyond simple syntactic constructs</span></p>
</li><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline"><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">automatically add MCDesc fields</span></p>
</li><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline"><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">improve debug-ability</span></p>
</li><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline"><p dir="ltr" style="line-height:1.15;margin-top:0pt;margin-bottom:0pt"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">improve error reporting</span></p>
</li><li dir="ltr" style="list-style-type:decimal;color:rgb(0,0,0);background-color:transparent;vertical-align:baseline"><span style="background-color:transparent;vertical-align:baseline;white-space:pre-wrap">auto-inversion for predicates </span></li>
</ol><div><font color="#000000"><span style="white-space:pre-wrap"><br></span></font></div><div><font color="#000000"><span style="white-space:pre-wrap">Someone in the room (I forgot the name, I'm sorry) said something which I found quite interesting, namely that he current state of tablegen is due to its quite rapid growth through the past years. Then point was raised that, probably, we will not be fixing anything by simply bolting on top further functionality.</span></font></div>
<div><font color="#000000"><span style="white-space:pre-wrap"><br></span></font></div><div><font color="#000000"><span style="white-space:pre-wrap">My desire was to steer the discussion towards how to design tablegen as a proper domain specific language targeted at compiler construction. I think it was generally agreed that this is a distant goal worth pursuing and that the first steps is to first document what tablegen currently has.</span></font></div>
<div><font color="#000000"><span style="white-space:pre-wrap"><br></span></font></div><div><font color="#000000"><span style="white-space:pre-wrap">The root cause for lack of documentation was identified as:</span></font></div>
<div><font color="#000000"><span style="white-space:pre-wrap"><br></span></font></div><div><i><span style="background-color:transparent;white-space:pre-wrap;color:rgb(0,0,0)">"People don't feel </span><span style="background-color:transparent;white-space:pre-wrap;line-height:1.15;color:rgb(0,0,0)">authoritative enough to go ahead and writ</span><font color="#000000"><span style="line-height:17px;white-space:pre-wrap">e docs. Many community members are knowledgeable in small pieces, but don’t feel are qualified to author documentation".</span></font></i></div>
<div><br></div><div>It was generally agreed that a way to solve this is to create a shared repository where everyone can commit any pieces of information they might have. We hope it will grow to a proper documentation for tablegen's features. Once gotten there we would be in a much better position to decide how to further develop this tool.</div>
<div><br></div><div>Renato Golin was kind enough to offer to work on the documentation project. I myself intend to get involved too.</div><div><br></div><div>Best regards,</div><div>Mihai</div></font></span></div></div>