Compilers
Welke code ontstaat uiteindelijk als op de bovenstaande code herhaaldelijk constant propagation en constant folding worden toegepast?
int n = 8;
int m = n * 2;
return m + 1;
- Areturn n * 2 + 1;
- Breturn 8 * 2 + m;
- Creturn 17;
Antwoord en toelichting tonen
Antwoord: C. return 17;
Bij constant propagation wordt, omdat n de waarde 8 krijgt en daarna niet wordt gewijzigd, n op de plaatsen waar het wordt gebruikt vervangen door 8, zodat m = 8 * 2. Constant folding berekent 8 * 2 tot 16, dus m = 16, en met verdere propagation en folding wordt m + 1 gelijk aan 16 + 1 = 17. De toewijzingen aan n en m worden niet meer gebruikt en worden als dode code verwijderd, zodat alleen return 17; overblijft. Vormen die halverwege zijn gestopt of waarbij de vervanging foutief is uitgevoerd, zijn niet het eindresultaat.