Transforming recursion into iteration for LLVM loop optimizations