/* { dg-do compile { target ia32 } } */
/* { dg-require-effective-target pie } */
/* { dg-options "-O2 -fPIE -fcommon" } */

int look_nbits[256], loop_sym[256];
const int ind[] = {
  0,  1,  8, 16,  9,  2,  3, 10, 17, 24, 32, 25, 18, 11,  4,  5,
 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13,  6,  7, 14, 21, 28,
 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51,
 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63
};
int out[256];
extern void bar (int *, int *);
void foo (int *l1, int *l2, int *v, int *v1, int *m1, int i)
{
  int L = i + 1, b = 20;
  int result, k;

  for (k = 1; k < 64; k++)
    {
      int look = (((L >> (b - 8))) & ((1 << 8) - 1));
      int nb = l1[look];
      int code;
      int r;

      if (nb)
	{
	  b -= nb;
	  result = l2[look];
	}
      else
	{
	  nb = 9;
	  code = (((L >> (b -= nb))) & ((1 << nb) - 1));
	  result = v[(code + v1[nb])];
	}
      r = result >> 4;
      result &= 15;
      if (result)
	{
	  k += r;
	  r = (((L >> (b -= result))) & ((1 << result) - 1));
	  if (r < (1 << (result - 1)))
	    result = r + (((-1) << result) + 1);
	  else
	    result = r;

	  out[ind[k]] = result;
	}
      bar (&L, &b);
    }
}

/* { dg-final { scan-assembler-not "leal\[ \t\]ind@GOTOFF\\(%\[^,\]*\\), %" } } */
