It would simplify a lot of code if loop canonicalization always creates pre-header blocks, and they are maintained late into compilation. This would require both allowing them to exist, but also to be maintained, e.g., #62665.
Another motivating issue: #68844 (comment)