Compilers

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?

if (c) x = 1;
else   x = 2;
y = x + 3;
  1. AHij kiest de grootste van x1 en x2 en geeft die terug
  2. BHij berekent de som van x1 en x2 en geeft die terug
  3. CHij kiest x1 of x2, afhankelijk van langs welk pad is gekomen
Antwoord en toelichting tonen

Antwoord: C. Hij kiest x1 of x2, afhankelijk van langs welk pad is gekomen

In SSA-vorm krijgen de toewijzing in de then-tak en die in de else-tak verschillende namen, x1 en x2, zodat moet worden aangegeven welke x in de berekening van y na het samenkomen moet worden gebruikt. De φ-functie is een notatie voor de keuze van de waarde op het samenvoegpunt: komt de uitvoering uit de then-tak, dan x1, en uit de else-tak, dan x2. In echte machinecode bestaat geen φ-instructie; deze wordt ten slotte vervangen door bijvoorbeeld registerkopieën. Grootte of som van waarden doet er niet toe.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Compilers

  1. Welk voorbeeld van constant folding in een compiler is juist?
  2. Welke code ontstaat uiteindelijk als op de bovenstaande code herhaaldelijk constant propagation en constant folding worden toegepast?
  3. Welke uitspraak is juist over wat gebeurt als op de bovenstaande code common subexpression elimination wordt toegepast?
  4. Wat wordt bij het verwijderen van dode code (dead code elimination) verwijderd?
  5. Welke combinatie van voordeel en nadeel van het inlinen (inline expansion) van functies is juist?

Vergelijkingen bij dit onderwerp