Hi , There's a difference in the code generated between O2 and O3 in the case below.
void fred(long in, short *out1) { int i; for (i=0;i<100;i++) out1[i+1] = out1[i]*in; } With O2 we generate at expand time - fred (in, out1) { unsigned int ivtmp.24; <bb 2>: ivtmp.24 = (unsigned int) out1; <bb 3>: MEM[index: ivtmp.24, offset: 2] = (short int) (in * (long int) MEM[index: ivtmp.24]); ivtmp.24 = ivtmp.24 + 2; if (ivtmp.24 != (unsigned int) (out1 + 200)) goto <bb 3>; else goto <bb 4>; <bb 4>: return; } With O3 we generate . fred (in, out1) { unsigned int ivtmp.23; short int D__lsm0.18; long int D.1212; <bb 2>: D__lsm0.18 = *out1; ivtmp.23 = 1; <bb 3>: D.1212 = (long int) D__lsm0.18 * in; D__lsm0.18 = (short int) D.1212; MEM[base: out1, index: ivtmp.23 * 2] = D__lsm0.18; ivtmp.23 = ivtmp.23 + 1; if (ivtmp.23 != 101) goto <bb 3>; else goto <bb 4>; <bb 4>: return; } -- Summary: Predictive commoning + ivopts possibly introducing extra sign extensions. Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: ramana dot radhakrishnan at celunite dot com GCC build triplet: i686-linux-gnu GCC host triplet: i686-linux-gnu GCC target triplet: arm-none-eabi http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33404