From 839764bd955d2bddedb4a38ab1d4d92c797c56b9 Mon Sep 17 00:00:00 2001 From: Carlo Zancanaro Date: Tue, 27 Nov 2012 18:20:06 +1100 Subject: Thesis and performance testing related stuff. --- tex/thesis/implementation/implementation.tex | 85 +++++++++++++++++++++++++++- 1 file changed, 83 insertions(+), 2 deletions(-) (limited to 'tex/thesis/implementation/implementation.tex') diff --git a/tex/thesis/implementation/implementation.tex b/tex/thesis/implementation/implementation.tex index 7e432f8..02f2180 100644 --- a/tex/thesis/implementation/implementation.tex +++ b/tex/thesis/implementation/implementation.tex @@ -13,18 +13,99 @@ develop it in C++ for two major reasons: obvious choice of language. \end{itemize} + +\section{Solver} + +The solver is a straightforward implementation of the algorithm +presented in Chapter \ref{chap:contribution}. The primary difference +is the use of objects instead of higher-order functions, as C++'s +support for higher-order functions was insufficient for our purposes. + The solver was developed using only the STL for the core of the solver. A front-end was developed using the ANTLR parser generator \cite{antlr} to test the solver separately to the LLVM/Clang integration. -\section{Solver} + +\subsection{Chain} + + + + +\subsection{Cycle} + + + +\subsection{Dense} + \section{LLVM/Clang} +We implemented our analysis as a Clang Static Analysis pass, building +off the Clang Static Analysis framework~\cite{clang-analysis}. Using +the infrastructure of the Clang project provided us with a CFG without +any extra work parsing, or otherwise handling, C code itself. + +Figure \ref{fig:clang-diagram} gives a very high-level idea of the +structure of our analysis pass and how it interfaces with other +components. The Clang framework provides the Zone analysis with a +Control Flow Graph. This CFG is then translated to a system of +monotonic, expansive equations. The DSI algorithm is designed to solve +these equation systems, and so we invoke our solver to provide us with +a solution. This solution identifies the bounds for variables at +different points in the program. +\begin{figure}[tbphH] + \begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node + distance=4cm,main node/.style={rectangle,draw,minimum + height=2cm,minimum width=3cm}] + + %\node[main node] (clang) {Clang Framework}; + \node[main node] (clang-analysis) {Clang Static Analysis Framework}; + \node[main node,fill=red!60] (eqns) [below of=clang-analysis] + {Zone analysis}; + \node[main node] (dsi) [below of=eqns] {DSI}; + \node (reality) [node distance=5cm,right of=eqns] {}; -\subsection{Chain construction} + \path [] + %(clang) edge[bend right] node[anchor=east] {CFG} (clang-analysis) + (clang-analysis) edge[bend right] node[anchor=east] {CFG} (eqns) + (eqns) edge[bend right] node[anchor=east] {Equation System} (dsi) + (dsi) edge[bend right] node[anchor=west] {Solution} (eqns) + (eqns) edge node[anchor=north] {Variable bounds} (reality) + %(eqns) edge[bend right] node[anchor=west] {Variable bounds} (clang-analysis) + %(clang-analysis) edge[bend right] node[anchor=west] {Errors/warnings} (clang) + ; + \end{tikzpicture} + \caption{High-level diagram of our analysis pass} + \label{fig:clang-diagram} +\end{figure} + + +\pagebreak +\subsection{Chain} \lstinputlisting{implementation/experiments/chain.c} + +\pagebreak +\subsection{Counter} +\lstinputlisting{implementation/experiments/counter.c} + +\lstinputlisting{implementation/experiments/backwards_counter.c} + +\pagebreak +\subsection{Nested Loops} +\lstinputlisting{implementation/experiments/nested.c} + +\pagebreak +\subsection{Double counting} +\lstinputlisting{implementation/experiments/example.c} + +\pagebreak +\subsection{Fibonacci} +\lstinputlisting{implementation/experiments/fib.c} + +\pagebreak +\subsection{Unreachable} +\lstinputlisting{implementation/experiments/irreducible.c} -- cgit v1.2.3