[LLVMdev] suggested x86 peephole optimization: use bit rotate to save one instruction during mask creation
Mat Hostetter
mjhostetter at gmail.com
Sun Mar 15 12:23:17 PDT 2015
This kind of pattern is very common when dealing with bit arrays:
unsigned long clear_mask(int bit)
{
return ~(1UL << bit);
}
clang 3.6 at -O3 compiles this in the straightforward way, moving 1 into
register, shifting it, then flipping all the bits:
movl $1, %eax
movb %dil, %cl
shlq %cl, %rax
notq %rax
gcc 4.8.2, however, is more clever. It moves -2, i.e. ~1, into a register
then rotates that into place, saving one instruction:
movl %edi, %ecx
movq $-2, %rax
rolq %cl, %rax
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150315/9130dcb4/attachment.html>
More information about the llvm-dev
mailing list