Folien VL-05 zusammengefasst

This commit is contained in:
Marco Ammon 2020-08-11 15:41:17 +02:00
parent 5a67af60ec
commit 538673d02e
2 changed files with 55 additions and 0 deletions

Binary file not shown.

View File

@ -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}