Högpresterande dynamiska språkimplementeringar gör stor användning av spekulativa optimeringar för att uppnå hastigheter nära statiskt kompilerade språk. Dessa optimeringar utförs vanligtvis av en just-in-time kompilator som genererar kod under en uppsättning antaganden om tillståndet i programmet och dess miljö. I vissa fall kan ett program köra kod som sammanställts enligt antaganden som inte längre är giltiga. Implementeringen måste sedan deoptimera programmet on-the-fly; detta innebär att hitta semantiskt likvärdig kod som inte förlitar sig på ogiltiga antaganden, översätta program tillstånd till det som förväntas av målkoden, och överföra kontroll. Detta dokument tittar på samspelet mellan optimering och deoptimering, och visar att resonemang om spekulation är förvånansvärt lätt när antaganden görs explicit i programrepresentationen. Denna insikt visas på en kompilator mellanliggande representation, namngiven surir, modellerad efter hög nivå representation för ett dynamiskt språk. Traditionella kompilatoroptimeringar såsom konstant hopfällbar, ouppnåelig kodeliminering och funktionsinstrykning visas vara korrekta i närvaro av antaganden. Dessutom fastställer tidningen riktigheten av kompilator transformationer som är specifika för deoptimering: nämligen obegränsad deoptimering, predikering hissning, och antar sammansättning.
REF studerar korrektheten i spekulativa JIT-optimeringar och visar hur inkorporering av antaganden i IR gör det lättare att resonera om likvärdighet.
Correctness of speculative optimizations with dynamic deoptimization
{'venue': 'PACMPL', 'journal': None, 'mag_field_of_study': ['Computer Science']}