E. Weddington wrote:
What do you get if you use the C99 construct of declaring the variable
in the for statement? Like so:
for(volatile int i = 0; i < COUNT; ++i);
I get the same code afaics.
In fact, I haven't been able to produce an empty loop that
isn't translated into an actual loop, volatile or not.
So maybe someone raised false alarm, and I'm guilty of
reporting it.
volatile adds instructions for copying registers to somewhere
else and back, but even without volatile the loop is made
for -O[0123]. Excerpt for x86, similarly for PPC:
(0x3b9ac9ff == 1000000000)
20: 8b 45 fc mov 0xfffffffc(%ebp),%eax
23: 40 inc %eax
24: 89 45 fc mov %eax,0xfffffffc(%ebp)
27: 8b 45 fc mov 0xfffffffc(%ebp),%eax
2a: 3d ff c9 9a 3b cmp $0x3b9ac9ff,%eax
2f: 7e ef jle 20 <f+0x20>
versus
8: 40 inc %eax
9: 3d 00 ca 9a 3b cmp $0x3b9aca00,%eax
e: 75 f8 jne 8 <f+0x8>
Another issue illustrating how this was discussed in de.*
was along the lines of strlen(x) == strlen(x) being optimized
away. So it is useless in an attempt to make the computer work
unless one (a) insists on using strlen and (b) instructs the
compiler not to optimize the comparison away e.g. using a #pragma
...