PointerFlow is a high-performance pointer analysis framework designed for LLVM programs. It leverages Intel AVX2 vector extensions for efficient bitset operations and incorporates advanced optimizations to compute WPA (whole-program aliasing).
Final project for my Computer Organisation II course, MSc Computer Science @ UBA.
Contains:
- Four implementations of a bitset: bitset_scalar, sparse_bitset_scalar and sparse_bitset_avx2 (plus variants of optimized ASM code with a slightly different memory layout.).
- Two implementations of Andersen's algorithm: naive, complete (following Hardekopf's 2007 paper, but with some wavefront behaviour and extra graph optimizations)
- Compact test suite for validating core functionality
- Benchmark suite for measuring performance of each implementation against each other.
- translator of C code to a format suitable for Andersen's constraints in the program
- (Does not properly solve any complex obscure pointer LLVM magic).
- C++23
- 64-bit Intel processor with AVX2 capabilities
- Linux kernel (Recommended)
- Python 3 (exclusively for generating test/benchmark cases)
- GCC + make + NASM
- Google Test
- Google Benchmark
- LLVM 22 (Required to build the main program, not needed for benchmark/tests)
make mainYou can then find it on build/bin/pointerflow_runner (Requires LLVM)
makemake checkmake run_benchIf you see this warning when building:
***WARNING*** CPU scaling is enabled, the benchmark real time measurements may be noisy and will incur extra overhead.
Run:
sudo cpupower frequency-set --governor performance