On Tue, Jul 24, 2012 at 4:37 PM, Steven Bosscher <stevenb....@gmail.com> wrote: > On Tue, Jul 24, 2012 at 3:08 PM, Uros Bizjak <ubiz...@gmail.com> wrote: >> This patch (r189803) regressed a bunch of tests on x86_64 [1], [2]. >> >> [1] http://gcc.gnu.org/ml/gcc-testresults/2012-07/msg02066.html >> [2] http://gcc.gnu.org/ml/gcc-regression/2012-07/msg00177.html > > These are all selective-scheduler test cases. It looks like qsort is > being used incorrectly.
This seems to fix it for me, but I don't understand why. Apparently, a pointer subtraction doesn't result in a signed value?? In any case, the sort on those arrays wasn't correct. Comments? Index: sel-sched-ir.c =================================================================== --- sel-sched-ir.c (revision 189808) +++ sel-sched-ir.c (working copy) @@ -954,7 +954,9 @@ return_regset_to_pool (regset rs) static int cmp_v_in_regset_pool (const void *x, const void *xx) { - return *((const regset *) x) - *((const regset *) xx); + ptrdiff_t d = (ptrdiff_t) *((const regset *) x); + ptrdiff_t dd = (ptrdiff_t) *((const regset *) xx); + return d - dd; } #endif