This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Why is unsigned type introduced in a simple case?


Hi,
For a simple example like below.

int
f1 (int p, short i, short n)
{
  int sum = 0;

  do
    {
      sum += i;
      i++;
    }
  while (i < n);

  return sum;
}

When compiling with -O2 -fdump-tree-all options, GCC introduces
unsigned type at the very beginning of gimple pass, for example, the
dump for gimple pass is like below.
f1 (int p, short int i, short int n)
{
  int D.4116;
  short int i.0;
  unsigned short i.1;
  unsigned short D.4119;
  int D.4120;
  int sum;

  sum = 0;
  <D.4111>:
  D.4116 = (int) i;
  sum = D.4116 + sum;
  i.0 = i;
  i.1 = (unsigned short) i.0;
  D.4119 = i.1 + 1;
  i = (short int) D.4119;
  if (i < n) goto <D.4111>; else goto <D.4112>;
  <D.4112>:
  D.4120 = sum;
  return D.4120;
}

It uses i.1 to increase the induction variable and converts it back to
signed type for comparison.  Is it designed behavior?  &why?

Thanks,
bin


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]