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

Reply via email to