Vi presenterar en optimerad implementering av den linjära scan registeralgoritmen för Sun Microsystems Java HotSpot TM klientkompilator. Linjär scan register allokering är särskilt lämplig för just-in-time kompilatorer eftersom det är snabbare än den vanliga graf-färgning tillvägagångssätt och ger resultat av nästan samma kvalitet. Vår allocator förbättrar den grundläggande linjära scan algoritmen genom att lägga till mer avancerade optimeringar: Den använder sig av livstidshål, delar intervaller om registertrycket är för högt, och modeller registrerar begränsningar i målarkitekturen med fasta intervaller. Tre ytterligare optimeringar flytta delade positioner utanför loopar, ta bort register-till-register flyttar och eliminera onödiga spill butiker. Interval uppdelning baseras på användningspositioner, som också fångar typen av användning och om en operand behövs i ett register eller inte. Detta undviker reservationen av en repa register. Benchmark resultat bevisa effektiviteten av den linjära scan algoritm: Medan sammanställningen hastigheten är lika med den gamla lokala register allocator som är en del av Sun JDK 5.0, heltal riktmärken köra ca 15% snabbare. Riktmärken för flytande punkter visar den höga effekten av Intel SSE2-tillägg på hastigheten på numeriska Java-applikationer: Med det nya SSE2-stödet aktiverat kör SPECjvm98 25% snabbare jämfört med nuvarande Sun JDK 5.0.
I tidigare arbete presenterade vi ytterligare optimeringar som förbättrar kvaliteten på linjär scan register allokering utan att påverka kompilera tid alltför mycket REF.
Optimized interval splitting in a linear scan register allocator
{'venue': "VEE '05", 'journal': None, 'mag_field_of_study': ['Computer Science']}