\label{sec:results} 
In order to exercise the 
framework, we applied it to the set of benchmarks we have previously used for
evaluating McVM/McJIT\cite{CC2011}, a dynamic system.  The benchmarks and
results are given in \tableref{Fig:Bench}.  About half of the benchmarks come
from the FALCON project\cite{falcon} and are purely array-based computations.
The other half of the benchmarks were collected by the \mclab team and cover a
broader set of applications and use more language features such as lambda
expressions, cell arrays and recursion.  The columns labeled \#Fn correspond to
the number of user functions, and the column labeled \#BFn corresponds to the
number of builtin functions used by the benchmark.  Note the high number of
builtins.  The column labeled ``Wild" indicates if our system rejected the
program as too wild.  Only the sdku benchmark was rejected because it used the
\texttt{load} library function which loads arbitrary variables from a stored
file. 
\rednote{For functions like \texttt{load}, which can return 
arbitrary values, we may have to provide alternative,
more "tame" versions in order to produce a tamed program.}  The
column labeled ``Mclass" indicates ``unique" if the interprocedural
value propagation found a unique mclass for every variable in the
program.  Only three benchmarks had one or more variables with
multiple different mclasses.  We verified that it was really the case
that a variable had two different possible classes in those three
cases.
%\mynote{Anton: can you briefly describe them?}

\begin{table}[htbp]
\begin{center}
\begin{scriptsize}
\begin{tabular}{|l|l|l|c|c|c|c|c|} \hline
Name & Description                           & Source             & \#Fn   & \#BFn  & Features  & Wild  & Mclass \\ \hline 
adpt & \textit{Adaptive quadrature}          & Numerical Methods  &  1     & 17      &          & no   & unique  \\
beul & \textit{Backward \rednote{Euler}}     & McLAB              &  11    & 30      & lambda   & no   & unique  \\ 
capr & \textit{Capacitance}                  & Chalmers EEK 170   &  4     & 12      &          & no   & unique  \\
clos & \textit{Transitive Closure}           & Otter              &  1     & 10      &          & no   & unique  \\
crni & \textit{Tridiagonal Solver}           & Numerical Methods  &  2     & 14      &          & no   & unique  \\
dich & \textit{Dirichlet Solver}             & Numerical Methods  &  1     & 14      &          & no   & unique  \\ 
diff & \textit{Light Diffraction}            & Appelbaum (MUC)    &  1     & 13      &          & no   & unique  \\
edit & \textit{Edit Distance}                & Castro (MUC)       &  1     & 6       &          & no   & unique  \\
fdtd & \textit{Finite Distance Time Domain}  & Chalmers EEK 170   &  1     & 8       &          & no   & unique  \\
fft  & \textit{Fast Fourier Transform}       & Numerical Recipes  &  1     & 13      &          & no   & \textbf{multi}   \\
% returns an undefined result on error
fiff & \textit{Finite Difference}            & Numerical Methods  & 1      & 8       &          & no   & unique  \\ 
mbrt & \textit{Mandelbrot Set}               & McLAB              & 2      & 12      &          & no   & unique  \\  
mils & \textit{Mixed Integer Least Squares}  & Chang and Zhou     & 6      & 35      &          & no   & unique  \\
nb1d & \textit{1-D Nbody}                    & Otter              & 2      & 9       &          & no   & unique  \\ 
nb3d & \textit{3-D Nbody}                    & Otter              & 2      & 12      &          & no   & unique  \\
nfrc & \textit{Newton Fractal}               & McLAB              & 4      & 16      &          & no   & unique  \\
nne  & \textit{Neural Net}                   & McLAB              & 3      & 16      & cell     & no   & unique  \\
play & \textit{Minimax Search}               & McLAB              & 5      & 26      & recursive, cell & no & \textbf{multi} \\ 
rayt & \textit{Raytracer}                    & Aalborg (Jensen)   & 2      & 28      &          & no   & unique  \\ 
sch2 & \textit{Sparse Schroed. Eqn Solver}   & McLAB              & 8      & 32      & cell, lambda & no & unique\\
schr & \textit{Schroedinger Eqn Solver}      & McLAB              & 8      & 31      & cell, lambda & no & unique\\
sdku & \textit{Sodoku Puzzle Solver}         & McLAB              & 8      &         & load      & \textbf{yes}  &        \\
sga  & \textit{Vectorized Genetic Algorithm} & Burjorjee          & 4      & 30      &           & no   & \textbf{multi}  \\ 
svd  & \textit{SVD Factorization}            & McLAB              & 11     & 26      &           & no   & unique     \\ \hline
\end{tabular}
\end{scriptsize}
\end{center}
\caption{Results of Running Value Analysis}
\label{Fig:Bench}
\end{table}

Although the main point of this experiment was just to exercise the framework,
we were very encouraged by
the number of benchmarks that were not wild and the overall accuracy of the
basic interprocedural value analysis.   We expect many other analyses to be
built using the framework, with different abstractions.  By implementing them
all in a common framework we will be be able to compare the different
approaches.
