------- Additional Comments From sebastian dot pop at cri dot ensmp dot fr 2005-08-18 11:51 ------- Reduced testcase is:
unsigned long long f4 (unsigned long long diff) { return ((unsigned long long) ((signed long long) diff < 0 ? -diff : diff)); } main () { int i; for (i = 0; i <= 10; i++) if (f4 ((long long) -i) != i) abort (); exit (0); } And the problem is in VRP: Visiting statement: diff.0D.1338_6 = (long long intD.5) diffD.1337_4; (analyze_scalar_evolution (loop_nb = 1) (scalar = diff.0_6) (get_scalar_evolution (scalar = diff.0_6) (scalar_evolution = (long long int) {0, +, ffffffffffffffff}_1)) (set_scalar_evolution (scalar = diff.0_6) (scalar_evolution = (long long int) {0, +, ffffffffffffffff}_1)) ) (instantiate_parameters (loop_nb = 1) (chrec = (long long int) {0, +, ffffffffffffffff}_1) (res = (long long int) {0, +, ffffffffffffffff}_1)) Found new range for diff.0_6: [0, 0] The computation of the min bound is not correct. I'm working on a patch. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23410