diff --git a/verfahren.pdf b/verfahren.pdf index 3d8bcc4..6b09ab2 100644 Binary files a/verfahren.pdf and b/verfahren.pdf differ diff --git a/verfahren.tex b/verfahren.tex index a9b4482..30ac602 100644 --- a/verfahren.tex +++ b/verfahren.tex @@ -47,12 +47,54 @@ \clearpage \section{Kontrollflussanalyse} \subsection{Kontrollflussgraph} +\begin{itemize} + \item Gerichteter Graph + \item Knoten: Grundblöcke (meist maximal) + \item Kante zwischen zwei Blöcken $A$ und $B$ wenn $B$ direkt nach $A$ ausgeführt werden kann (etwa [un-]bedingter Sprung oder Fallthrough) + \item Synthetische Ergänzung um Entry- und Exit-Knoten, die mit Kante verbunden sind +\end{itemize} \subsection{Dominanz} -\subsection{Rückwärtskante} -\subsection{Natürliche Schleifen} +\begin{itemize} + \item Knoten $x$ dominiert $y$ ($x \geq \geq y$), wenn jeder Pfad von Wurzel zu $y$ durch $x$ laufen muss + \item Strikte Dominanz $x >> y$, falls zusätzlich $x \neq y$ gilt + \item $\mathrm{ImmDom[}y\mathrm{]}$ ist strikter Dominator von $y$, der $y$ am Nächsten ist + \item Bestimmung des ImmDomms: TODO + \item Dominatorbaum enthält jeden Knoten als Kind seines ImmDomms $\rightarrow$ Pfad zwischen $x$ und $z$ in Dominatorbaum $\Leftrightarrow$ $x >> z$ +\end{itemize} + +\subsection{Schleifenerkennung} +\begin{itemize} + \item Region: \begin{itemize} + \item Untergraph mit einem \enquote{Header} $d$, der (potentiell mehrere) Eingangskante von außerhalb besitzt + \item Wichtige Region: maximale Region mit $d$ dominiert alle Knoten der Region + \item Hierarchischer Flussbaum: Baum der Regionen + \end{itemize} + \item Rückwärtskante: Kante $(n,d)$ mit $d \geq \geq n$ + \item Natürliche Schleife: \begin{itemize} + \item Rückwärtskante $(n, d)$ sowie alle Knoten $k$ mit $d \ge \ge k$ und es gibt einen Pfad von $k$ nach $n$ ohne $d$ + \item Bestimmung mit Worklist-Algorithmus, der bei $n$ beginnt und rekursiv die Vorgänger bis $d$ durchläuft und in Menge aufnimmt + \end{itemize} + \item Suche nach Rückwärtskanten und natürlichen Schleifen in wichtigen Regionen ausreichend + \item \enquote{Unsaubere} Regionen: \begin{itemize} + \item ein Knoten dominiert nachgeordneten Zyklus + \item Erkennung durch Prüfung der Reduzierbarkeit des Graphs: \begin{itemize} + \item Entfernung der Rückwärtskanten aus KFG $\rightarrow$ azyklischer Graph, in dem jeder Knoten von der Wurzel erreicht werden kann $\Leftrightarrow$ KFG frei von unnatürlichen Schleifen + \item Alternative mit Transformationen: Am Ende Graph aus einem einzigen Knoten $\Leftrightarrow$ KFG reduzierbar (ohne Zyklen) \begin{description} + \item[T1-Transformation] Selbstschleifen aus Graph löschen + \item[T2-Transformation] Knoten mit eindeutigem Vorgänger mit diesem zusammenfassen + \end{description} + \end{itemize} + \end{itemize} +\end{itemize} \subsection{Kontrollflussabhängigkeit} \section{Datenflussanalyse} +\subsection{Datenabhängigkeiten} +\begin{itemize} + \item Schreiben vor Lesen: + \item Schreiben vor Schreiben: Ausgabeabhängigkeit + \item Lesen vor Schreiben: Anti-Abhängigkeit +\end{itemize} \section{Aliasanalyse}