<html><head></head><body>My understanding is that modern CPUs do this already.<br>
<br>
What could help is to have a dedicated alignToP2.<br>
<br>
<br>
Cheers,<br>
Rafael<br>
<br><br><div class="gmail_quote">On October 6, 2016 4:04:14 PM EDT, Rui Ueyama <ruiu@google.com> wrote:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre class="k9mail">ruiu created this revision.<br />ruiu added reviewers: rafael, davide.<br />ruiu added a subscriber: llvm-commits.<br /><br />If an alignment is a power of two, we can avoid integer division,<br />and it is very likely to happen.<br /><br /><br /><a href="https://reviews.llvm.org/D25344">https://reviews.llvm.org/D25344</a><br /><br />Files:<br />  include/llvm/Support/MathExtras.h<br /><br /><br />Index: include/llvm/Support/MathExtras.h<br /><hr /><br />--- include/llvm/Support/MathExtras.h<br />+++ include/llvm/Support/MathExtras.h<br />@@ -670,6 +670,10 @@<br /> /// \endcode<br /> inline uint64_t alignTo(uint64_t Value, uint64_t Align, uint64_t Skew = 0) {<br />   assert(Align != 0u && "Align can't be 0.");<br />+  if (LLVM_LIKELY(isPowerOf2_64(Align))) {<br />+    Skew &= Align - 1;<br />+    return ((Value + Align - 1 - Skew) & -Align) + Skew;<br />+  }<br />   Skew %= Align;<br />   return (Value + Align - 1 - Skew) / Align * Align +
Skew;<br /> }<br /><br /><br /></pre></blockquote></div><br>
-- <br>
Sent from my Android device with K-9 Mail. Please excuse my brevity.</body></html>