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