Why is unsigned type introduced in a simple case?
Bin.Cheng
amker.cheng@gmail.com
Mon Jul 14 15:57:00 GMT 2014
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
More information about the Gcc
mailing list