This is the mail archive of the
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
For a simple example like below.
f1 (int p, short i, short n)
int sum = 0;
sum += i;
while (i < n);
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)
short int i.0;
unsigned short i.1;
unsigned short D.4119;
sum = 0;
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.4120 = sum;
It uses i.1 to increase the induction variable and converts it back to
signed type for comparison. Is it designed behavior? &why?