Bug 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)