The addition of maynotprogress as an LLVM IR function attribute allows us to change the way infinite side-effect free loops are eliminated. This patch modifies LoopDeletion to better optimize away dead loops. If a (possibly infinite) loop has no side effects and has the loop metadata `llvm.loop.mustprogress`, we now remove it even if we cannot compute the MaxBackedgeTaken, if the function has the `mustprogress` attribute. If the loop is not marked `llvm.loop.mustprogress` then the loop is permitted to be infinite without side-effects and we do not eliminate it.
If the function does NOT have the `maynotprogress` attribute, then we must prove that the loop is finite through SCEV before removing it, so the default behavior is not modified.
This builds upon the changes in D85393, D86841, D86233.