You have more faith in the compiler than I do. Here's a stupid test I made.
* In C++, using goto: https://godbolt.org/z/YqCMbU
* In Rust, with relooped CFG: https://godbolt.org/z/IIXtKo
The compiler was obviously not able to unroll the relooped code into the original CFG.
A specific example: in principle, the compiler could see the exact target of every continue in the Rust code, so the continue on line 34 could go directly to line 27 (or, better, as in C++ the basic blocks could just be laid out adjacently), but the compiler does not actually do this and there are a bunch of unnecessary tests on the path between those two lines.