Compiler

Wandelt man den obigen Code in SSA-Form um, so erscheint nach der if-Anweisung ein Ausdruck wie „x3 = φ(x1, x2)“. Welche Funktion der φ-Funktion ist richtig?

if (c) x = 1;
else   x = 2;
y = x + 3;
  1. ASie wählt von x1 und x2 den größeren Wert und gibt ihn zurück
  2. BSie berechnet die Summe von x1 und x2 und gibt sie zurück
  3. CSie wählt je nach durchlaufenem Pfad x1 oder x2
Antwort und Erläuterung anzeigen

Antwort: C. Sie wählt je nach durchlaufenem Pfad x1 oder x2

In der SSA-Form erhalten die Zuweisungen im then-Zweig x1 und im else-Zweig x2 unterschiedliche Namen, sodass bei der Berechnung von y nach dem Zusammenfluss ausgedrückt werden muss, welches x zu verwenden ist. Die φ-Funktion ist ein Symbol für die Wertauswahl an der Zusammenflussstelle: kommt die Ausführung aus dem then-Zweig, wird x1 gewählt, aus dem else-Zweig x2. Im tatsächlichen Maschinencode gibt es keinen φ-Befehl; sie wird am Ende durch Registerkopien o. Ä. ersetzt. Mit Größenvergleich oder Summe hat sie nichts zu tun.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Compiler

  1. Welches ist ein richtiges Beispiel für Constant Folding im Compiler?
  2. Welcher Code ergibt sich schließlich, wenn auf den obigen Code wiederholt Konstantenpropagierung und Constant Folding angewendet werden?
  3. Welche Aussage ist richtig, wenn auf den obigen Code die Eliminierung gemeinsamer Teilausdrücke angewendet wird?
  4. Was wird bei der Entfernung von totem Code (Dead Code Elimination) entfernt?
  5. Welche Kombination aus Vor- und Nachteil des Inlinings von Funktionen ist richtig?

Vergleiche zu diesem Thema