/* PR debug/45055 */
/* { dg-do compile } */
/* { dg-options "-O2 -ftracer -fsched-pressure -funroll-loops -fschedule-insns -fcompare-debug" } */
/* { dg-require-effective-target scheduling } */

int colormap[10];

extern int bar ();

void
foo (int *img, int fp, int y, int *ptr, int depth, int c, int t, int xm)
{
  int x, color, count;
  for (; y; y--)
    {
      if (depth)
	{
	  count = bar ();
	  for (x = xm; x; x--)
	    {
	      if (c != 1)
		count = color = -1;
	      if (count == 0)
		color = count = bar ();
	      if (color)
		t = bar (fp);
	      *ptr++ = colormap[t];
	    }
	}
      switch (*img)
	{
	case 1:
	  bar ();
	case 3:
	case -1:
	case -3:
	  bar ();
	case -4:
	  bar ();
	}
    }
}
