Folien VL-06 zusammengefasst

This commit is contained in:
Marco Ammon 2020-08-11 16:19:48 +02:00
parent 538673d02e
commit 1d4d54f1f2
2 changed files with 26 additions and 0 deletions

Binary file not shown.

View File

@ -325,8 +325,34 @@
\item Kopienfortschreibung: Aus $v_i = y_j$ kann jede Verwendung von $v_i$ durch $y_j$ ersetzt werden \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 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 \item Gemeinsame Teilausdrücke, verfügbare Ausdrücke und vorhersehbare Ausdrücke lassen sich durch Wertnummerierung in gesamter Prozedur leicht erkennen
\item Elimination toten Codes:\begin{itemize}
\item alles, was nicht als lebendig markiert ist, ist tot
\item Markierung von Anweisungen als lebendig, falls sie \begin{itemize}
\item Seiteneffekte wie I/O, Funktionsaufrufe oder die Rückgabe von Werten hat
\item eine später von einer lebendigen Anweisung benutzte Variable schreibt
\item eine Verzweigung ist, von der eine lebendige Anweisung kontrollflussabhängig ist
\end{itemize} \end{itemize}
\end{itemize}
\end{itemize}
\subsection{Rücktransformation aus SSA-Form} \subsection{Rücktransformation aus SSA-Form}
\begin{itemize}
\item $\phi$-Funktion nicht in Hardware abbildbar, Umwandlung notwendig
\item Aus $v_3 = \phi(v_1, v_2)$ wird \begin{itemize}
\item $v_3 = v_i$ in Vorgängerblock $i$ falls sich Lebensspannen der $v_i$ nicht paarweise überlappen (konventionelle SSA-Form)
\item $v_3 = t$ ($t$ frische Temporärvariable) in Block mit $\phi$-Funktion sowie $t = v_i$ in Vorgängerblock $i$
\end{itemize}
\item Sequentialisierung paralleler Kopieroperationen (TODO VL-06)
\item Variablen können auch nur schwach definiert sein, etwa durch Zeiger auf Variablen oder Seiteneffekte von Prozeduren auf globale Variablen $\rightarrow$ Hilfsfunktion $\mathrm{isAlias}(p, v)$\begin{itemize}
\item \begin{equation*}
\mathrm{isAlias}(p, v) = \begin{cases}
*p & \text{falls}\, p = \&v\\
v & \text{sonst}
\end{cases}
\end{equation*}
\item Für jede Zuweisung $*p = $ für jede Variable $v_i$, auf die $p$ zeigen könnte, neue Zuweisung $v_{i+1} = \mathrm{isAlias}(p, v_i)$ einfügen
\end{itemize}
\end{itemize}
\section{Aliasanalyse} \section{Aliasanalyse}