2020-08-06 13:32:49 +02:00
% !TeX spellcheck = de_DE
\documentclass [11pt,a4paper,toc] { scrartcl}
\usepackage [a4paper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm] { geometry}
\usepackage [ngerman] { babel}
\usepackage { amssymb}
\usepackage { scrextend}
\usepackage [utf8] { inputenc}
\usepackage { amsmath}
\usepackage { enumitem}
\usepackage { mathtools}
\usepackage [load=named] { siunitx}
\usepackage { csquotes}
\usepackage [hidelinks] { hyperref}
%\usepackage{listings}
\usepackage { algorithmicx}
\usepackage { algpseudocode}
%\usepackage{pgfplots}
\usepackage { tikz}
%\usetikzlibrary{positioning}
%\usetikzlibrary{arrows.meta}
%\usetikzlibrary{quotes}
%\usetikzlibrary{angles}
%\usetikzlibrary{babel}
%\usetikzlibrary{fit}
%\usepackage{datetime}
%\usepackage{xcolor}
%\pdfminorversion=7 % Import-Unterstützung für PDFs bis Version 1.7
%\pgfplotsset{compat=1.16} % verhindern, dass pgfplots im Rückwärtskompatibilitätsmodus arbeitet
\setlist [enumerate,1] { label={ \arabic * .} }
\setlist [enumerate,2] { label={ \alph * )} }
\title { Optimierungen in Übersetzern: Verfahren}
\author { Marco Ammon (my04mivo)}
\date { \today }
\makeatletter
\g @addto@macro\bfseries { \boldmath }
\makeatother
\begin { document}
\maketitle
\tableofcontents
\clearpage
2020-08-09 14:18:06 +02:00
\section { Kontrollflussanalyse}
\subsection { Kontrollflussgraph}
2020-08-10 21:11:38 +02:00
\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}
2020-08-09 14:18:06 +02:00
\subsection { Dominanz}
2020-08-10 21:11:38 +02:00
\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}
2020-08-09 14:18:06 +02:00
\subsection { Kontrollflussabhängigkeit}
\section { Datenflussanalyse}
2020-08-10 21:11:38 +02:00
\subsection { Datenabhängigkeiten}
\begin { itemize}
\item Schreiben vor Lesen:
\item Schreiben vor Schreiben: Ausgabeabhängigkeit
\item Lesen vor Schreiben: Anti-Abhängigkeit
\end { itemize}
2020-08-09 14:18:06 +02:00
\section { Aliasanalyse}
\section { Induktionsvarianten und schleifeninvarianter Code}
\section { Schleifen und Arrays}
\section { Schleifentransformationen}
\section { Schleifenrestrukturierungen}
2020-08-06 13:32:49 +02:00
\end { document}