2016-10-30 3 views
1

Während des Studierens stieß ich auf die folgenden Aussagen:"Forward muss Probleme" Erklärung in Compiler-Design

Ein Join-Punkt ist ein Programmpunkt, wo zwei Zweige treffen.

Verfügbare Ausdrücke ist ein Vorwärts, muss Problem.

Weiterleiten = Daten fließen von innen nach außen.

Muss = Am gemeinsamen Punkt muss die Eigenschaft für alle verbundenen Pfade gelten.

Ich bekomme, was Gelenkpunkt, verfügbaren Ausdruck und vorwärts ist. Aber ich verstehe, was genau mit MUST gemeint ist.

Jemand bitte erklären was MUSS ist mit Beispiel.

Antwort

0

Betrachten Sie das folgende Beispiel:

a = 10 
if condition 
    x = a + 1 // First calculation only in true branch. 
else 
    x = 3 
end 
y = a + 1 // Can we eliminate this redundant calculation? 

Hier wird der arithmetische Ausdruck a + 1 wird zweimal berechnet. Das Ziel der verfügbaren Expressionsanalyse besteht darin, herauszufinden, ob eine dieser Berechnungen durch Wiederverwendung des zuvor berechneten Werts eliminiert werden kann. Wenn es möglich ist, die Berechnung zu eliminieren, kann der Compiler den Code optimieren, um das wiederverwendbare Berechnungsergebnis in einem Register zu halten.

die redundante Berechnung zu beseitigen, die folgenden Bedingungen erfüllt sein müssen:

  • keine Variable, die in der Berechnung verwendet wird, hat zwischen den Berechnungen neu zugewiesen worden ist. In dem gegebenen Beispiel wird a nicht neu zugewiesen.
  • Der Ausdruck wird garantiert auf allen Wegen berechnet, die zu der Aussage führen, wo der Ausdruck eliminiert wird. Hier wird der Ausdruck nur im Zweig true berechnet, nicht jedoch im Zweig false. Wenn also die Bedingung falsch war, wurde a + 1 noch nicht berechnet, was bedeutet, dass wir die Berechnung nicht eliminieren können.

Dies ist ein vorwärts Analyse, da wir über die Flusssteuerung Graph von oben nach unten laufen. Es ist eine müssen Analyse, da der Ausdruck auf allen Pfad berechnet werden muss, die zur Berechnung führen, die eliminiert werden sollte.