[OT] compiler optimisations
Andrea Fontana via Digitalmars-d
digitalmars-d at puremagic.com
Fri Apr 24 02:07:22 PDT 2015
On Friday, 24 April 2015 at 06:29:55 UTC, deadalnix wrote:
> On Thursday, 23 April 2015 at 10:23:57 UTC, Andrea Fontana
> wrote:
>> On Thursday, 23 April 2015 at 10:08:24 UTC, John Colvin wrote:
>>>> asm.dlang.org
>>>
>>> and d.godbolt.org
>>>
>>> This isn't a D-specific question though, so gcc.godbolt.org
>>> would allow you to test a wider range of backends.
>>
>> I was wondering if compilers can optimize this:
>>
>> uint foo3(uint a)
>> {
>> return a*!(a/5);
>> }
>>
>> That actually gives the same results.
>
> That is cool ! However, careful, division can stall the
> pipeline.
I'm not an assembly expert but it seems that some compilers
(using godbolt, asm.dlang.org) optimize it as:
return a*(a<=4)
gcc:
foo3(unsigned int):
xor eax, eax
cmp edi, 4
setbe al
imul eax, edi
ret
gdc:
uint foo2(uint a)
{
return a*(a<5);
}
uint foo3(uint a)
{
return a*!(a/5);
}
uint example.foo2(uint):
xorl %eax, %eax
cmpl $4, %edi
setbe %al
imull %edi, %eax
ret
uint example.foo3(uint):
movl %edi, %eax
movl $-858993459, %edx
mull %edx
xorl %eax, %eax
shrl $2, %edx
testl %edx, %edx
sete %al
imull %edi, %eax
ret
More information about the Digitalmars-d
mailing list