Compilers

Welke uitspraak over de tussenrepresentatie in SSA-vorm is juist?

  1. AAan elke variabele wordt in het programma precies één keer een waarde toegewezen
  2. BAlle variabelen worden in het geheugen geplaatst in plaats van in registers
  3. CHet programma wordt herschreven tot een vorm zonder enige voorwaardelijke sprong-instructies
Antwoord en toelichting tonen

Antwoord: A. Aan elke variabele wordt in het programma precies één keer een waarde toegewezen

In SSA-vorm worden variabelen zo hernoemd dat aan elke variabele één keer een waarde wordt toegewezen, en op samenvoegpunten wordt met een φ-functie een waarde gekozen. Wordt x tweemaal toegewezen, dan wordt het bijvoorbeeld verdeeld in x1 en x2, zodat duidelijk is welke wordt gebruikt. Doordat het verband tussen definitie en gebruik duidelijk is, zijn optimalisaties zoals constant propagation en het verwijderen van dode code gemakkelijker. Sprongen worden door φ-functies behandeld, zodat sprong-instructies niet verdwijnen. Variabelen staan ook niet in het geheugen; ze worden meestal als kandidaat voor registers behandeld.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Compilers

  1. Als de bovenstaande code in SSA-vorm wordt gebracht, komt na het if-statement een uitdrukking zoals "x3 = φ(x1, x2)". Welke uitspraak over de werking van deze φ-functie is juist?
  2. Welk voorbeeld van constant folding in een compiler is juist?
  3. Welke code ontstaat uiteindelijk als op de bovenstaande code herhaaldelijk constant propagation en constant folding worden toegepast?
  4. Welke uitspraak is juist over wat gebeurt als op de bovenstaande code common subexpression elimination wordt toegepast?
  5. Wat wordt bij het verwijderen van dode code (dead code elimination) verwijderd?

Vergelijkingen bij dit onderwerp