LSR is Unbearably Slow

I just filed bug 7872 about non-scalability of the LSR analysis
algorithms. It may be related to bug 6727.

The fundamental problem appears to be re-running SCEV analyses such as
properlyDominates and SCEVComplexityCompare over and over again on large
SCEV expressions. Memoizing results for SCEVComplexityCompare appears
to help significantly but that is much harder to do with things like
properlyDominates.

Is anyone actively looking at LSR compile time issues? LLVM 2.7 is
taking on the order of 30 minutes to optimize some very simple test
cases and that's after doing the memoization work for
SCEVComplexityCompare. TOT has the same problem.

                     -Dave

I also noticed LSR spending a lot of time in GenerateAllReuseFormulae, just to have some cases pruned in NarrowSearchSpaceUsingHeuristics. I’m not familiar enough with the code to comment on how this affects the quality of LSR results, but a hack is to “EstimateSearchSpaceComplexity” inside the loops of GenerateAllReuseFormulae and cut out early.

  • Jan

I assume you mean NarrowSearchSpaceUsingHeuristics inside the loops.

I tried this and it helped a bit but nowhere near enough to overcome
the algorithmic complexity. Looks like we need another solution.

[copied this to the bug to keep track of it]

                            -Dave