A front-end compiler generates unique instructions for virtual method
calls in intermediate representation code that may be passed to a
back-end compiler. A back-end compiler in accordance with the preferred
embodiments receives the intermediate representation code, and processes
the unique instructions to generate therefrom equivalent code with
explicit method calls, where possible. The machine code from the back-end
compiler is then executed using sample inputs to generate profile data.
The profile data and intermediate representation code are fed into the
back-end compiler, which then generates code that may devirtualize
virtual method calls according to the profile data by providing one or
more explicit method calls for target methods that have an execution
frequency (as indicated by the profile data) that exceeds a predetermined
threshold.
Un recopilador anticipado genera las instrucciones únicas para las llamadas virtuales del método en el código intermedio de la representación que se puede pasar a un recopilador back-end. Un recopilador back-end de acuerdo con las encarnaciones preferidas recibe el código intermedio de la representación, y procesa las instrucciones únicas de generar código therefrom equivalente con llamadas explícitas del método, en lo posible. El código automático del recopilador back-end entonces se ejecuta usando entradas de la muestra para generar datos del perfil. Los datos del perfil y el código intermedio de la representación se alimentan en el recopilador back-end, que entonces genera el código que puede devirtualize llamadas virtuales del método según los datos del perfil proporcionando unas o más llamadas explícitas del método para los métodos de la blanco que tienen una frecuencia de la ejecución (según lo indicado por los datos del perfil) que excede un umbral predeterminado.