Home

Mellanrepresentationen

Mellanrepresentationen, ofta förkortat IR, är en abstrakt kodform som används av en kompilator mellan front-endens syntaktiska och semantiska analys och back-endens maskinnära kodgenerering. Genom att använda IR kan kompilatorn analysera och optimera program oberoende av det specifika högnivåspråket och av den slutliga maskinarkitekturen. IR gör det också lättare att byta ut eller förbättra delar av kompilatorn utan att påverka hela kedjan.

I praktiken förekommer IR i olika former, bland annat som kontrollflödesgrafer (CFG), tre-adresskod eller i form

Exempel på verkliga IR inkluderar LLVM IR, som används i LLVM-kompilatorn, samt GCCs GIMPLE och RTL. Andra

Designvalen för en IR innebär avvägningar mellan abstraktionsnivå, analysprecision och prestanda, liksom hur väl semantiken från

av
SSA-form
(Static
Single
Assignment).
SSA-form
förenklar
dataflödesanalys
och
optimeringar
genom
att
varje
variabel
tilldelas
exakt
en
gång.
Många
moderna
kompilatorer
använder
en
plattformsspecifik
IR
men
behåller
en
gemensam
mellanrepresentation
för
att
möjliggöra
portabilitet
och
återanvändbara
optimeringspass.
språk-IR
som
ofta
betraktas
som
IR
är
Java
bytecode
i
JVM-sammanhang
och
WebAssembly
i
moderna
webbramar.
Dessa
IR-nivåer
balanserar
detaljeringsgrad
och
analysmöjligheter,
och
de
ger
en
gemensam
grund
för
optimeringar
som
konstantfällning,
död
kod
borttagning,
loopoptimering,
inline-funktioner
och
registerallokering.
källspråket
bevaras
genom
översättningen
till
maskinkod.
En
väl
utformad
IR
är
språkneutral,
lätt
att
analysera
och
tillräckligt
detaljerad
för
att
generera
effektiva
målmaskinkoder.