<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 11, 2018 at 6:00 PM, Andrew Trick <span dir="ltr"><<a href="mailto:atrick@apple.com" target="_blank">atrick@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;"><span class="gmail-"><br><div><br><blockquote type="cite"><div>On May 11, 2018, at 4:26 AM, Andrea Di Biagio <<a href="mailto:andrea.dibiagio@gmail.com" target="_blank">andrea.dibiagio@gmail.com</a>> wrote:</div><br class="gmail-m_3441946112008053912Apple-interchange-newline"><div><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">The goal is to help users defining a predicate the check logic. If we use a TIIPredicate, we specify the logic only once, in a declarative way, and then we let tablegen generate code for us.</div><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><br></div><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;float:none;display:inline">If for some reason, a user doesn't want to use this approach, then they can still provide their own implementation for variant 2. (i.e. the version of `isGPRZero` that takes a MCInst as input).</span></div></blockquote></div><br></span><div>The important thing is that users can call into target-specific TII entry points (i.e. not declared in TargetInstrInfo as a virtual method). The reason I provided a C++ hook is so that users could do this without learning the tablegen backend. Although if it’s easy to define a new target specific TIIPredicate, that’s fine too.</div><div><br></div><div>-Andy</div></div></blockquote><div><br></div><div>I agree.</div><div>The auto generated target hook is not a virtual method. It is always a static member of the XXXGenInstrInfo class automatically generated by tablegen.</div><div><br></div><div>
<div>The latest version of patch 1 (<a href="https://reviews.llvm.org/D46695">https://reviews.llvm.org/D46695</a>) also added a new 
`CheckFunctionCall`

predicate.</div><div>
People 
that don't find easy to use a TIIPredicate can now use a CheckFunctionCall instead. Overall, I think it is good to have alternatives to using TIIPredicate; some TII hooks used for predicates can be very long, and converting them into predicates can be error prone. Spotting logical mistakes in auto-generated (especially in big code blocks) can be difficult and annoying.<br></div><div>Ideally, TIIPredicate will be used in most cases where the predicate function is small. If the logic gets too complicated, then people can always use a `CheckFunctionCall`.<br></div><div><br></div><div>Cheers<br></div></div><div>-Andrea<br></div><div><br></div></div><br></div></div>