[OT] compiler optimisations

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Thu Apr 23 03:08:20 PDT 2015


On Thursday, 23 April 2015 at 10:04:47 UTC, Rikki Cattermole 
wrote:
> On 23/04/2015 10:02 p.m., Andrea Fontana wrote:
>> On Thursday, 23 April 2015 at 08:33:56 UTC, John Colvin wrote:
>>> Why can no compiler I try optimise this toy example as I 
>>> would expect?
>>>
>>> // uncomment if using a C compiler
>>> // typedef unsigned int uint;
>>> uint foo(uint a)
>>> {
>>>  if (a < 5)
>>>    return (a * 3) / 3;
>>>  else
>>>    return 0;
>>> }
>>>
>>> So, I would expect the compiler to be able to see that it is
>>> equivalent to
>>>
>>> uint foo(uint a)
>>> {
>>>  return (a < 5) ? a : 0;
>>> }
>>>
>>> But apparently not a single modern compiler I tried can do 
>>> this
>>> optimisation, unless it's hidden in some obscure flag I'm not 
>>> aware of.
>>>
>>> An even more striking example can be found if you replace the 
>>> / with
>>> %, where the result of the function is then unconditionally 
>>> zero, but
>>> every compiler i tried still spat out multiplication 
>>> instructions.
>>>
>>> Is there a good reason for this, or is it just " * and / 
>>> aren't always
>>> inverses, so never mind all the cases where they are"?
>>>
>>> Now I know that this seems like a unrealistic example, but 
>>> when you're
>>> in complicated meta-programming situations code like this can 
>>> and will
>>> appear.
>>
>> If I'm right, there's a website where I can see assembly 
>> generated by d
>> compiler. And it's not dpaste... any hint?
>
> 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.


More information about the Digitalmars-d mailing list