Folien VL-05 zusammengefasst
This commit is contained in:
parent
5a67af60ec
commit
538673d02e
BIN
verfahren.pdf
BIN
verfahren.pdf
Binary file not shown.
@ -273,6 +273,61 @@
|
||||
\item Gleiche Ids $\Leftrightarrow$ gleicher Ausdruck
|
||||
\end{itemize}
|
||||
|
||||
\section{Static Single Assignment (SSA)}
|
||||
\begin{itemize}
|
||||
\item Jede Variable hat exakt eine starke und keine schwache Definition
|
||||
\item erfordert Verwendung von $\phi$-Funktionen, die verschiedene Variablen zusammenführt
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Konstruktion der SSA-Form}
|
||||
\begin{itemize}
|
||||
\item In isoliertem Grundblock trivial: Erzeugung einer neuen Variable $x_i$ bei jeder Definition
|
||||
\item $\phi$-Funktionen sollten möglichst sparsam nur wenn notwendig eingefügt werden
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection{Iteratives Dominanzgrenzenverfahren nach Cytron ($\mathcal{O}(N^2)$)}
|
||||
\begin{itemize}
|
||||
\item Dominanzgrenzenkriterium: Aus Definition von $v$ in Grundblock $X$ folgt eine $\phi$-Funktion für $v$ in jedem Grundblock der Dominanzgrenze von $X$
|
||||
\item Eingefügte $\phi$-Funktionen werden Variablen zugewiesen, für die das Dominanzgrenzenkriterium erneut angewendet werden muss
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection{Wertnummerierungsverfahren nach Click}
|
||||
\begin{itemize}
|
||||
\item Wertnummerierung für jeden Grundblock $Z$ durchführen: \begin{itemize}
|
||||
\item $\mathrm{wn}_Z(\mathrm{const}) = \mathrm{const}$
|
||||
\item Wenn $Z$ Entry-Knoten, alle Wertnummern der Tupel in $Z$ auf ungültig setzen
|
||||
\item Bei zwei Vorgängern $X, Y$ von $Z$, welche beide bereits besucht sind:\begin{itemize}
|
||||
\item Wenn $\mathrm{wn}_X(t) \neq \mathrm{wn}_Y(t)$, dann neue Wertnummer $x$ für $\mathrm{wn}_Z(t)$ einführen und $\mathrm{wn}_Z(t) = \phi(\mathrm{wn}_X(t), \mathrm{wn}_Y(t))$ generieren
|
||||
\item Ansonsten: $\mathrm{wn}_Z(t) = \mathrm{wn}_X(t)$
|
||||
\end{itemize}
|
||||
\item Bei einem Vorgänger $X$ mit undefiniertem $\mathrm{wn}_X(t)$ diesen rekursiv initialisieren
|
||||
\item Bei zwei Vorgängern $X, Y$ von $Z$, wobei nur $X$ noch unbesucht ist:\begin{itemize}
|
||||
\item Neue Wertnummer für $\mathrm{wn}_Z(t)$ einführen
|
||||
\item Neue besondere Wertnummer für $\mathrm{wn}_X(t)$ einführen
|
||||
\item Vorläufige $\phi'$-Funktion $\mathrm{wn}_Z(t) = \phi'(\mathrm{wn}_X(t), \mathrm{wn}_Y(t))$ generieren
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
\item Wertnummerierung für alle Tupel $t$ in $Z$ durchführen
|
||||
\item Nach Durchführung für alle Blöcke, $\phi'$-Funktionen korrigieren: \begin{itemize}
|
||||
\item Besondere Wertnummern in $X$ durch letzte in $X$ gültige Wertnummer ersetzen
|
||||
\item Offene $\phi'$-Funktionen durch abgeschlossene $\phi$-Funktion mit ersetzten Werten ersetzen
|
||||
\item Falls $t$ in unbesuchten Blöcken nicht geändert wurde, $\mathrm{wn}_Z(t) = \phi'(\mathrm{wn}_X(t),\mathrm{wn}_Y(t))$ löschen und alle Verwendungen von $\mathrm{wn}_Z(t)$ durch $\mathrm{wn}_X(t)$ ersetzen
|
||||
\end{itemize}
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Optimierungen auf SSA-Form}
|
||||
\begin{itemize}
|
||||
\item Konstantenweitergabe: \begin{itemize}
|
||||
\item Aus $v_i = c$ können alle Verwendungen von $v_i$ durch die Konstante $c$ ersetzt werden
|
||||
\item Aus $v_i = \phi(c_1, c_2, \textellipsis)$ kann $v_i$ durch $c_1$ ersetzt werden, wenn alle $c_i$ gleich sind
|
||||
\item Datenflussanalyse muss nach Ersetzung nicht wiederholt werden, Worklist-Algorithmus reicht aus
|
||||
\end{itemize}
|
||||
\item Kopienfortschreibung: Aus $v_i = y_j$ kann jede Verwendung von $v_i$ durch $y_j$ ersetzt werden
|
||||
\item Lebendigkeit einer Variable lässt sich direkt aus weiterem lesenden Zugriff erkennen
|
||||
\item Gemeinsame Teilausdrücke, verfügbare Ausdrücke und vorhersehbare Ausdrücke lassen sich durch Wertnummerierung in gesamter Prozedur leicht erkennen
|
||||
\end{itemize}
|
||||
\subsection{Rücktransformation aus SSA-Form}
|
||||
|
||||
\section{Aliasanalyse}
|
||||
|
||||
\section{Induktionsvarianten und schleifeninvarianter Code}
|
||||
|
Loading…
Reference in New Issue
Block a user