/* { dg-options "-O3 -fgraphite-identity -fdump-tree-graphite-all" } */

typedef struct
{
      int mode,state,num,state_out;
      unsigned char* bits;
      char *out;
}test;
unsigned char copy( test* s )
{
   while(1)
     {
      if (s->mode == 0) break;
      if (s->state_out >= s->num) break;
      *(s->out) = s->bits[s->state_out];
      if (s->mode == 0) s->mode++;
     }
}
unsigned char compress(test *in)
{
   unsigned char p_in, p_out;
   while(1)
   {
      if (in->state == 1) 
      {
         p_out |= copy(in);
         if (in->state_out < in->num) break;
      }
   }
   return p_in || p_out;
}
/* { dg-final { cleanup-tree-dump "graphite" } } */


