This question already has an answer here:
Why does the gcc compiler translate while loops into do-while constructs when creating assembly code? I know any while loop can be rewritten as a do-while for instance in c
while (test) {
...
}
can be rewritten as
if ( !test ) goto skip;
do {
. . .
} while ( test );
skip: