\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 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}