October 26, 2014 Re: [Bug 162] New: GDC unable to de-virtualise method calls | ||||
---|---|---|---|---|
| ||||
Attachments:
| I fought and lost a massive argument spanning years about this. There are very limited cases where the backend is able to do this successfully.
On 26 October 2014 20:37, via D.gnu <d.gnu@puremagic.com> wrote:
> Bug ID 162 <http://bugzilla.gdcproject.org/show_bug.cgi?id=162> Summary GDC
> unable to de-virtualise method calls Product GDC Version development
> Hardware All OS All Status NEW Severity enhancement Priority Normal
> Component gdc Assignee ibuclaw@gdcproject.org Reporter
> ibuclaw@gdcproject.org
>
> Currently we emit method calls as the following:
>
> *(c->__vptr + 40) (c, 1, 2, 3);
>
> Which translate directly into the following trees:
>
> indirect_ref(pointer_plus(component_ref(c, __vptr), 40))
>
>
> GCC provides a more simplistic tree code called obj_type_ref, which represents a virtual method lookup, and given the binfo structure we already pass to the backed, this would give a chance for the optimiser passes to statically determine the dynamic type of the object and devirtualise the call.
>
> obj_type_ref(component_ref(c, __vptr), c, 40)
>
> ------------------------------
> You are receiving this mail because:
>
> - You are watching all bug changes.
>
>
|
Copyright © 1999-2021 by the D Language Foundation