Add slides about fixpoint

This commit is contained in:
Théophile Bastian 2019-10-18 11:34:17 +02:00
parent baca8da49a
commit fc080b8d15

View file

@ -17,7 +17,7 @@
\usepackage{multirow} \usepackage{multirow}
\usepackage[many]{tcolorbox} \usepackage[many]{tcolorbox}
\usepackage[absolute,overlay]{textpos} \usepackage[absolute,overlay]{textpos}
\usetikzlibrary{arrows.meta} \usetikzlibrary{arrows.meta,shapes}
\usepackage{texlib/my_listings} \usepackage{texlib/my_listings}
\usepackage{texlib/specific} \usepackage{texlib/specific}
@ -646,4 +646,89 @@ Segmentation fault.
\end{center} \end{center}
\end{frame} \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} \end{document}