The following program give wrong results when compiled in O1: #include "stdio.h"
int v[]= {10,20,30,40,50}; inline int inc(int i) { int * pi = &i; int res; asm volatile("\tmovl (%1), %0\n" "\tincl %0\n" :"=r" (res) : "r" (pi)); return res; } int main (){ int i; for(i=0; i<5; i++) v[i] = inc(v[i]); for(i=0; i<5; i++) printf("%d\n",v[i]); return i; } > ./a.out 134513615 134513615 134513615 134513615 134513615 while when compiled without optimizations it works: > ./a.out 11 21 31 41 51 -- Summary: error in loop invariant motion tranformation Product: gcc Version: 4.1.1 Status: UNCONFIRMED Severity: minor Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: alessandro dot lonardo at roma1 dot infn dot it GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27725