Compiler

Welche Eigenschaft der Zwischendarstellung in SSA-Form ist richtig?

  1. AJeder Variablen wird im Programm genau einmal ein Wert zugewiesen
  2. BAlle Variablen liegen im Speicher statt in Registern
  3. CSie wird so umgeschrieben, dass sie keinerlei bedingte Verzweigungsbefehle enthält
Antwort und Erläuterung anzeigen

Antwort: A. Jeder Variablen wird im Programm genau einmal ein Wert zugewiesen

In der SSA-Form werden Variablen so umbenannt, dass jede nur einmal zugewiesen wird, und an Zusammenflussstellen wird der Wert per φ-Funktion ausgewählt. Wird x z. B. zweimal zugewiesen, entstehen x1 und x2, sodass klar ist, welches verwendet wird. Da Definition-Verwendung-Beziehungen eindeutig sind, lassen sich Optimierungen wie Konstantenpropagierung und Entfernung von totem Code leichter durchführen. Verzweigungen werden durch φ-Funktionen behandelt, die Verzweigungsbefehle verschwinden also nicht. Variablen liegen auch nicht im Speicher, sondern werden meist als Registerkandidaten behandelt.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Compiler

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

Vergleiche zu diesem Thema