------- Comment #17 from pinskia at gcc dot gnu dot org 2006-03-10 13:56 ------- What happens to the time if you replace that function with: void NumSift (long *array, unsigned long i, unsigned long j) { unsigned long k; while ((i + i) <= j) { k = i + i; long t, t1; t = array[k]; if (k < j) { t1 = array[k+1]; if (t < t1) ++k, t = t1; } t1 = array[i]; if (t1 < t) { array[k] = t1; array[i] = t; i = k; } else i = j + 1; } return; } ----------- The semantics should be the same, I just pulled out the PREs as much as I could.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21485