[SCEV] Iteratively compute ranges for deeply nested expressions.
At the moment, getRangeRef may overflow the stack for very deeply nested
expressions.
This patch introduces a new getRangeRefIter function, which first builds
a worklist of N-ary expressions and phi nodes, followed by their
operands iteratively.
getRangeRef has been extended to also take a Depth argument and it
switches to use getRangeRefIter once the depth reaches a certain
threshold.
This ensures compile-time is not impacted in general. Note that
the iterative algorithm may lead to a slightly different evaluation
order, which could result in slightly worse ranges for cyclic phis.
https://llvm-compile-time-tracker.com/compare.php?from=
23c3eb7cdf3478c9db86f6cb5115821a8f0f5f40&to=
e0e09fa338e77e53242bfc846e1484350ad79773&stat=instructions
Fixes #49579.
Reviewed By: mkazantsev
Differential Revision: https://reviews.llvm.org/D130728