
/*----------------------------------------------------------------------
 *  WCET Benchmark created by Andreas Ermedahl, Uppsala university,
 *  May 2000.
 *
 *  The purpose of this benchmark is to have two loop where the inner
 *  loops max number of iterations depends on the outer loops current
 *  iterations.  The results corresponds to something Jannes flow-analysis
 *  should produce.
 *
 * The example appeard for the first time in:
 *
 *  @InProceedings{Ermedahl:Annotations,
 * author =       "A. Ermedahl and J. Gustafsson",
 * title =        "Deriving Annotations for Tight Calculation of Execution Time",
 * year =         1997,
 * month =        aug,
 * booktitle =    EUROPAR97,
 * publisher =    "Springer Verlag",
 * pages =        "1298-1307"
 * }
 *
 * The result of Jannes tool is something like:
 *   outer loop:       1   2   3   4   5   6   7   8   9   10   11
 *   inner loop max:   5   9   8   7   4   2   1   1   1   1    1
 *
 *----------------------------------------------------------------------*/


 #ifdef TEST
 #include "../mini_printf.h"
 #include "../posix_c.h"
 #else
 #include <stdio.h>
 #endif


int complex(int* a, int* b)
{
  while(*a < 300000)
    {
      while(*b < *a)
	{
	  if(*b > 50000)
	    *b = *b * 3;
	  else
	    *b = *b + 2;
	  if(*b >= 10 && *b <= 12)
	    *a = *a + 10;
	  else
	    *a = *a + 1;
	}
      *a = *a + 2;
      *b = *b - 10;
    }
  return 1;
}

int main()
{
  /* a = [1..30] b = [1..30] */
  int a = 1, b = 1, answer = 0;
  /* if(answer)
     {a = 1; b = 1;}
     else
     {a = 30; b = 30;} */
  answer = complex(&a, &b);
  #ifdef TEST
      if(a == 300000 && b == 747637){
          int i = 1;
          memcpy(out_mem, &i, sizeof(int));
          return 0;
      }
      int i = 0;
      memcpy(out_mem, &i, sizeof(int));
  #endif

  printf("%d %d\n", a, b);
  return 0;
}
