bad loop optimization

bad loop optimization

Bild des Benutzers Bert Jonson

void foo(int a) {
    while(a);
}
int main() {
    foo(1);
}

Compiler removes empty loop and there is no endless loop that i expect. MSVC and GCC works correctly.

Windows, ICC 13.1.

6 Beiträge / 0 neu
Letzter Beitrag
Nähere Informationen zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.
Bild des Benutzers Sergey Kostrov

With Intel C++ compiler this is a well know issue but it is Not a problem. What optimization options did you use, /O1, /O2 or /O3?

Bild des Benutzers Bert Jonson

With any level of optimization.

Bild des Benutzers Sergey Kostrov

>>...Compiler removes empty loop and there is no endless loop that i expect...

Do you need to use a similar processing in a real application?

Bild des Benutzers Jennifer J. (Intel)

Adding "#pragma intel optimization_level 0" before the function "foo()" will keep the loop. 

Or introduce a volatile variable like below: 

//#pragma intel optimization_level 0
void foo(int a) {
    volatile int b=a;
    while(a)
    ;
}

Bild des Benutzers Bert Jonson

Okay, i forgot about volatile, thanks.

Melden Sie sich an, um einen Kommentar zu hinterlassen.