<div dir="ltr">In this case there are no truncates. Everything is a 64-bit type. The bswap pattern is matched by the middle end of the compiler with no target specific knowledge. The middle end sees the type is 64 bits and so doesn't match it as bswap because only the lower half is swapped. The X86 specific backend doesn't do any BSWAP matching so we don't apply the x86 specific knowledge that zeroing the upper bits is free.<div><br></div><div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Nov 26, 2018 at 11:11 AM Fabian Giesen via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 11/26/2018 4:11 AM, Stefan Kanthak via llvm-dev wrote:<br>
> The other part of my post but holds: the following function, compiled for<br>
> x86-64, is NOT properly optimized (see <<a href="https://godbolt.org/z/uM9nvN" rel="noreferrer" target="_blank">https://godbolt.org/z/uM9nvN</a>>):<br>
> <br>
> unsigned long __bswapsi2 (unsigned long ul)<br>
> {<br>
>      return (ul >> 3 * 8) & 0xff000000ul<br>
>           | (ul >>     8) & 0x00ff0000ul<br>
>           | (ul <<     8) & 0x0000ff00ul<br>
>           | (ul << 3 * 8) & 0x000000fful;<br>
> }<br>
<br>
That looks like another instance of truncation in the wrong places <br>
causing the pattern matches to fail. There have been a couple of those <br>
in the past with other things like rotates.<br>
<br>
This is indeed a bug, but if you need a quick workaround, the pattern <br>
does work when you use a 32-bit (e.g. unsigned int or uint32_t) type.<br>
<br>
-Fabian<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>