/* { dg-do compile } */
/* { dg-options "-Os -fdump-tree-sink-stats" } */

typedef short int16_t;
typedef unsigned char uint8_t;

void foo(int16_t runs[], uint8_t alpha[], int x, int count)
{
    int16_t* next_runs = runs + x;
    uint8_t*  next_alpha = alpha + x;

    while (x > 0)
    {
        int n = runs[0];

        if (x < n)
        {
            alpha[x] = alpha[0];
            runs[0] = (int16_t)(x);
            runs[x] = (int16_t)(n - x);
            break;
        }
        runs += n;
        alpha += n;
        x -= n;
    }

    runs = next_runs;
    alpha = next_alpha;
    x = count;

   for (;;)
    {
        int n = runs[0];

        if (x < n)
        {
            alpha[x] = alpha[0];
            break;
        }
        x -= n;
        runs += n;
   }
}

/* We should not sink the next_runs = runs + x calculation after the loop.  */
/* { dg-final { scan-tree-dump-times "Sunk statements:" 0 "sink1" } } */
