Request for review: SimplifyIndVar simplify out of loop

I’m putting this here as I’m a beginner.

This change allows simplification post loop for users of IV.

Some questions:

  • when changing a pass, how do you reassure yourself about possible perf regressions ? How to efficiently share the results ? A json ? A compare table ? Is test-suite the only suite to use or others are expected ?
  • I remarked different analysises inferring the same conclusions which is in my case detecting the IV upper bound. To name them: LazyValue, Lattice, ValueTracking, SCEV. How to choose wisely between them ? I spotted that SCCP recognises that the increment was not overflowing and adds the NSW/NUW flag. To do so SCCP estimates a range for the variable. But this fact is not available to the downstream passes. Does LLVM allow requesting some “facts” about those analysis without creating a hard dependency on them ? For example, ConstraintElimination could be requesting those facts to have access to interesting bounds that could not be inferred using only conditional branch edges dominating a block.
  • For compile_time measurement, is there a way to have timeit perform multiple runs and to have mean/std + quantiles instead of simply one run ?