<div>Well, we like the operator because it maps cleanly to Fortran's ISHFTC intrinsic. There must also be other compilers out there, maybe catering to cryptos, that have their own intrinsic for circular shift in other languages. It seems wasteful for an optimizer to break apart an intrinsic into its elemental pieces in order for LLVM to put them back together. This was done in our compiler for some time and it cluttered up the interface code.</div>
<div><div><div><br></div><div>Just curious... what kind of optimizations are done on ISD::ROTL/ROTR? We're able to preform certain InstCombines and other peeps when we see a binary operator. I do not have any experience trying to optimize ISD::ROTL.<br>
<br><div class="gmail_quote">On Tue, Jul 31, 2012 at 12:17 PM, Eli Friedman <span dir="ltr"><<a href="mailto:eli.friedman@gmail.com" target="_blank">eli.friedman@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On Tue, Jul 31, 2012 at 8:42 AM, Cameron McInally<br>
<<a href="mailto:cameron.mcinally@nyu.edu">cameron.mcinally@nyu.edu</a>> wrote:<br>
> Andy,<br>
><br>
> Here is the left circular shift operator patch. I apologize to the reviewer<br>
> in advance. The patch has a good bit of fine detail. Any<br>
> comments/criticisms?<br>
><br>
> Some caveats...<br>
><br>
> 1) This is just the bare minimum needed to make the left circular shift<br>
> operator work (e.g. no instruction combining).<br>
><br>
> 2) I tried my best to select operator names in the existing style; please<br>
> feel free to change them as appropriate.<br>
<br>
</div>We intentionally haven't included a rotate instruction in LLVM in the<br>
past; the justification is that it's generally straightforward for the<br>
backend to form rotate operations, and making the optimizer<br>
effectively handle the new rotation instruction adds a substantial<br>
amount of complexity.  You're going to need to make a strong argument<br>
that the current approach is insufficient if you want to commit a<br>
patch like this.<br>
<span class="HOEnZb"><font color="#888888"><br>
-Eli<br>
</font></span></blockquote></div><br></div></div></div>