diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/pr42246.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/pr42246.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/pr42246.c b/gcc/testsuite/gcc.dg/pr42246.c new file mode 100644 index 000000000..ee17a2112 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr42246.c @@ -0,0 +1,36 @@ +/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -fselective-scheduling -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops" } */ + +typedef enum +{ + empty = 0, pawn = 1, knight = 2, king = 3, bishop = 5, rook = 6, queen = 7 +} +PIECE; +extern int p_values[15]; +extern int *last[65]; +int +Quiesce (int alpha, int beta, int wtm, int ply) +{ + register int initial_alpha, value, delta; + register int *goodmv, *movep, moves = 0, *sortv, temp; + for (movep = last[ply - 1]; movep < last[ply]; movep++) + if (p_values[(((*movep) >> 15) & 7) + 7] + + p_values[(((*movep) >> 18) & 7) + 7] >= delta) + { + register int done; + register int *end = last[ply - 1] + moves - 1; + do + { + done = 1; + movep = last[ply - 1]; + for (; movep < end; movep++, sortv++) + if (*sortv < *(sortv + 1)) + { + *(movep + 1) = temp; + done = 0; + } + } + while (!done); + } +} + |