diff --git a/slides.tex b/slides.tex index 2de12a2..b7fded6 100644 --- a/slides.tex +++ b/slides.tex @@ -17,7 +17,7 @@ \usepackage{multirow} \usepackage[many]{tcolorbox} \usepackage[absolute,overlay]{textpos} -\usetikzlibrary{arrows.meta} +\usetikzlibrary{arrows.meta,shapes} \usepackage{texlib/my_listings} \usepackage{texlib/specific} @@ -646,4 +646,89 @@ Segmentation fault. \end{center} \end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section*{Extra slides} + +\begin{frame}[noframenumbering] +\end{frame} + +\begin{frame}[noframenumbering]{Fixpoint upon control flow merge} + \begin{columns} + \begin{column}{0.3\textwidth} + \begin{tikzpicture} + \begin{scope}[every node/.style={rectangle,thick,draw,scale=0.95}] + \node (if) at (0, 5) {\lstbash{if cnd}}; + \node (then) at (-1, 3) { \lstbash{then A} }; + \node (else) at (1, 3) { \lstbash{else B} }; + \node (after) at (0, 1) { \lstbash{C} }; + \end{scope} + \node [circle, thick, draw, minimum size=3em, color=red] (circafter) at (0, 1) {}; + \begin{scope}[>={Stealth[black]}, every path/.style={draw=black,very thick}] + \path [->] (if) -- (then); + \path [->] (if) -- (else); + \path [->] (then) -- (after); + \path [->] (else) -- (after); + \end{scope} + \end{tikzpicture} + \end{column} + \begin{column}{0.6\textwidth} + \begin{center} + If eg. + \[ + CFA(A) = c-48 \qquad CFA(B) = c-52 + \] + no possible unwinding data for C, \alert{even for the + compiler}! + + \vspace{1em} + Also, \alert{no possible clean function postlude}! + + \vspace{2em} + $\implies$ $CFA(A) = CFA(B)$ and merge is immediate + \end{center} + \end{column} + \end{columns} +\end{frame} + +\begin{frame}[noframenumbering]{Fixpoint upon loop control flow merge} + \begin{columns} + \begin{column}{0.3\textwidth} + \begin{tikzpicture} + \begin{scope}[every node/.style={rectangle,thick,draw,scale=0.95}] + \node (inbound) at (0, 7) {\lstbash{A}}; + \node (while) at (0, 5) {\lstbash{for i in ...}}; + \node (do) at (0, 3) { \lstbash{do a = array[i]; B} }; + \node (done) at (0, 1) { \lstbash{C} }; + \end{scope} + \node [ellipse, thick, draw, minimum width=10em, minimum height=3em, color=red] (circafter) at (0, 3) {}; + \begin{scope}[>={Stealth[black]}, every path/.style={draw=black,very thick}] + \path [->] (inbound) -- (while); + \path [->] (while) edge[bend right] (do); + \path [->] (do) -- (done); + \path [->] (do) edge[bend right] (while); + \end{scope} + \end{tikzpicture} + \end{column} + \begin{column}{0.6\textwidth} + \begin{center} + {\large\alert{Variable stack frame size!}} + + \vspace{1em} + + We cannot hope for an invariant\dots\\ + but the compiler cannot + either. + + \vspace{1em} + + { + \large\alert{$\implies$} the compiler will \alert{fallback to + \reg{rbp}}\\ + } + even with \lstbash{--fomit-frame-pointer} + \end{center} + \end{column} + \end{columns} +\end{frame} + \end{document}