This implementation was created for an early (pre-release) version of LLVM 2.5. For best results, you should compile the source code using the my-llvm-gcc script that's part of the inclusion-based pointer analysis package for LLVM linked on the same webpage as this file. This script is a drop-in replacement for gcc in the build process and creates a single, whole-program bitcode file. That file should then be passed through LLVM's own optimization passes in the order specified below (this is important; some passes destroy the invariants guaranteed by earlier passes, such as mergereturn's invariant that every function has a single return statement): -internalize -mem2reg -indmemrem -raiseallocs -predsimplify -mergereturn -simplify-libcalls -loopsimplify -scalarrepl -licm -instcombine -condprop -constprop -sccp -gvn -die -adce -dse -constmerge -globaldce -globalopt -tailcallelim -ipconstprop -ipsccp -deadargelim -loop-deletion -simplifycfg -mergereturn Good luck!