Compilers
Welke uitspraak is juist over wat gebeurt als op de bovenstaande code common subexpression elimination wordt toegepast?
x = (a + b) * c;
y = (a + b) * d;
- Aa + b wordt maar één keer berekend en in een tijdelijke variabele gezet, die in de twee expressies wordt hergebruikt
- Bx en y zijn gelijkende expressies, dus de berekening van een van beide wordt verwijderd
- CVermenigvuldigingen worden door optellingen vervangen om de berekening lichter te maken
Antwoord en toelichting tonen
Antwoord: A. a + b wordt maar één keer berekend en in een tijdelijke variabele gezet, die in de twee expressies wordt hergebruikt
Common subexpression elimination is een optimalisatie waarbij, als dezelfde waarde herhaaldelijk wordt berekend, die maar één keer wordt berekend en het resultaat wordt hergebruikt. In dit voorbeeld wordt t = a + b berekend en worden x = t * c en y = t * d gebruikt, zodat één optelling minder nodig is. Er moet echter worden gecontroleerd dat a en b tussen de twee expressies niet worden overschreven. x en y zijn verschillende waarden, zodat niet een van beide kan worden verwijderd. Het vervangen van vermenigvuldigingen door lichtere bewerkingen is een andere optimalisatie, strength reduction.