This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Why is unsigned type introduced in a simple case?
- From: "Bin.Cheng" <amker dot cheng at gmail dot com>
- To: "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Mon, 14 Jul 2014 16:57:51 +0100
- Subject: Why is unsigned type introduced in a simple case?
- Authentication-results: sourceware.org; auth=none
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