Optimizing LLVM pass sequences with shackleton: a linear genetic programming framework