\section{Misc supplementary material}

\begin{frame}[fragile]{\cesasme{} and control flow}
    \begin{center}
        \textbf{Straight-line code:} hypothesis of code analysers, but
        also\ldots{}
    \end{center}

    \begin{minipage}[c]{0.35\textwidth}
\begin{lstlisting}[language=C]
for(i) {
    if(A[i] % 2 == 0)
        A[i] *= 2;
    A[i] += B[i];
}
\end{lstlisting}
    \end{minipage}
    \hfill
    \begin{minipage}[c]{0.60\textwidth}
        \begin{itemize}
            \item If not taken: map
            \item If taken: \alert{dependency} in \lstc{A[i]}!
            \item Performance varies depending on branch
            \item Performance \alert{strongly depends} on \alert{input data}
        \end{itemize}
    \end{minipage}
\end{frame}


\begin{frame}[fragile]{\staticdeps: lack of context}
    \begin{minipage}[t]{0.48\textwidth}
        \begin{block}{\alert{Context-dependent stride}}
\begin{lstlisting}[language=C]
for(int i=0; i < n-k; ++i)
    A[i] += A[i+k];
\end{lstlisting}
\begin{center}
    $\downarrow$
\end{center}
\begin{lstlisting}[language={[x86masm]Assembler}]
loop:
  mov  (%rax,%rdx,4),%ecx
  add  %ecx,(%rax)
  add  $0x4,%rax
  cmp  %rsi,%rax
  jne  loop
\end{lstlisting}

\begin{center}
    \textbf{No dep found!}
\end{center}

        \end{block}
    \end{minipage}
    \hfill\vrule\hfill
    \begin{minipage}[t]{0.48\textwidth}
        \begin{block}{\alert{Graphs algorithms}}
            \vspace{0.7em}
            \begin{itemize}
                \item{} Graphs: commonly represented as \eg
\begin{lstlisting}[language=C]
struct Node {
  // ...
  vector<Node*> siblings;
};
\end{lstlisting}
                \item{} Values of \lstc{siblings} will alias \alert{on
                    purpose}!
                \item{} \ldots{}thus breaking \staticdeps{}.
            \end{itemize}
        \end{block}
    \end{minipage}
\end{frame}
