<div dir="ltr">Is alignTo actually showing up in profiles of real world code?</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Oct 6, 2016 at 3:34 PM, Rafael Espíndola via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">It is marginally faster on a "Intel(R) Xeon(R) CPU E5-2697 v2"<br>
<br>
firefox<br>
  master 6.521730037<br>
  patch  6.53065974 1.00136922304x slower<br>
chromium<br>
  master 4.381491021<br>
  patch  4.372600839 1.00203315654x faster<br>
chromium fast<br>
  master 1.847313003<br>
  patch  1.840066086 1.0039384004x faster<br>
the gold plugin<br>
  master 0.326036955<br>
  patch  0.323885574 1.00664241069x faster<br>
clang<br>
  master 0.550480887<br>
  patch  0.547021193 1.00632460688x faster<br>
llvm-as<br>
  master 0.03225211<br>
  patch  0.031885871 1.01148593369x faster<br>
the gold plugin fsds<br>
  master 0.355666359<br>
  patch  0.353588254 1.00587718901x faster<br>
clang fsds<br>
  master 0.633038735<br>
  patch  0.629498967 1.0056231514x faster<br>
llvm-as fsds<br>
  master 0.030099552<br>
  patch  0.0297617 1.0113519053x faster<br>
scylla<br>
  master 2.908191778<br>
  patch  2.900006405 1.00282253618x faster<br>
<br>
Cheers,<br>
Rafael<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On 6 October 2016 at 17:58, Rafael Espíndola <<a href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a>> wrote:<br>
> The attached test passes all tests. I will benchmark to see if it<br>
> makes any difference.<br>
><br>
> I also noticed a missing optimization. It would be nice if we could<br>
> keep a single function but have the optimizer take care of it, so I<br>
> tried<br>
><br>
> uint64_t foo(uint64_t Value, uint64_t Align) {<br>
>   return alignToNonP2(Value, 1 << Align);<br>
> }<br>
><br>
> but it still produces<br>
><br>
> define i64 @_Z3foomm(i64 %Value, i64 %Align) local_unnamed_addr #0 {<br>
> entry:<br>
>   %sh_prom = trunc i64 %Align to i32<br>
>   %shl = shl i32 1, %sh_prom<br>
>   %conv = sext i32 %shl to i64<br>
>   %add.i = add i64 %Value, -1<br>
>   %sub.i = add i64 %add.i, %conv<br>
>   %div.i = urem i64 %sub.i, %conv<br>
>   %add2.i = sub i64 %sub.i, %div.i<br>
>   ret i64 %add2.i<br>
> }<br>
><br>
> Changing 1 to 1ULL does cause us to optimize it<br>
><br>
> define i64 @_Z3foomm(i64 %Value, i64 %Align) local_unnamed_addr #0 {<br>
> entry:<br>
>   %shl = shl i64 1, %Align<br>
>   %add.i = add i64 %Value, -1<br>
>   %sub.i = add i64 %add.i, %shl<br>
>   %.not = sub i64 0, %shl<br>
>   %add2.i = and i64 %sub.i, %.not<br>
>   ret i64 %add2.i<br>
> }<br>
><br>
><br>
> Cheers,<br>
> Rafael<br>
><br>
> On 6 October 2016 at 17:00, Rafael Espíndola <<a href="mailto:rafael.espindola@gmail.com">rafael.espindola@gmail.com</a>> wrote:<br>
>> On 6 October 2016 at 16:39, Davide Italiano <<a href="mailto:dccitaliano@gmail.com">dccitaliano@gmail.com</a>> wrote:<br>
>>> On Thu, Oct 6, 2016 at 1:37 PM, Rui Ueyama <<a href="mailto:ruiu@google.com">ruiu@google.com</a>> wrote:<br>
>>>> Or to make alignTo accept only power of twos and fix code that passes<br>
>>>> non-power-of-twos.<br>
>>>><br>
>>><br>
>>> Do you know how many of these cases are in LLVM and if there are legitimate?<br>
>><br>
>> Interesting idea. I added an assert and I am running the tests.<br>
>><br>
>> Cheers,<br>
>> Rafael<br>
</div></div><div class="HOEnZb"><div class="h5">______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>