dmd codegen improvements

Iain Buclaw via Digitalmars-d digitalmars-d at puremagic.com
Wed Aug 19 13:22:33 PDT 2015


On 19 August 2015 at 21:00, deadalnix via Digitalmars-d <
digitalmars-d at puremagic.com> wrote:

> On Wednesday, 19 August 2015 at 18:47:21 UTC, Paulo Pinto wrote:
>
>> On Wednesday, 19 August 2015 at 18:41:07 UTC, Walter Bright wrote:
>>
>>> On 8/19/2015 11:03 AM, Jacob Carlborg wrote:
>>>
>>>> Not sure how the compilers behave in this case but what about
>>>> devirtualization?
>>>> Since I think most developers compile their D programs with all files
>>>> at once
>>>> there should be pretty good opportunities to do devirtualization.
>>>>
>>>
>>> It's true that if generating an exe, the compiler can mark leaf classes
>>> as final and get devirtualization. (Of course, you can manually add 'final'
>>> to classes.)
>>>
>>> It's one way D can generate faster code than C++.
>>>
>>
>> C++ also has final and if I am not mistaken both LLVM and Visual C++ do
>> devirtualization, not sure about other compilers.
>>
>
> GCC is much better than LLVM at this. This is an active area of work in
> both compiler right now.
>
>
Can't speak for LLVM, but scope classes in GDC are *always* devirtualized
because the compiler knows the vtable layout and using constant propagation
to find the direct call.

You *could* do this with all classes in general, but this is a missed
opportunity because the vtable is initialized in the library using memcpy,
rather than by the compiler using a direct copy assignment.

https://issues.dlang.org/show_bug.cgi?id=14912

I not sure even LTO/PGO could see through the memcpy to devirtualize even
the most basic calls.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20150819/9ab642be/attachment.html>


More information about the Digitalmars-d mailing list