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
...



Reply via email to