/* Compile with -O2 -g -fdump-tree-copyrename3.  */

typedef struct list {
  struct list *n;
  int v;
} elt, *node;

#define NULL 0

node find_val (node c, int v, node e) {
  while (c < e) {
    if (c->v == v)
      return c;
    c++;
  }
  return NULL;
}

node find_prev (node c, node w) {
  while (c) {
    node o = c;
    c = c->n;
    if (c == w)
      return o;
  }
  return NULL;
}
  
node check_arr (node c, node e) {
  while (c < (e - 1)) {
    if (c->v > (c+1)->v)
      return c;
    c++;
  }
  return NULL;
}

node check_list (node c, node t) {
  while (c != t) {
    node n = c->n;
    if (c->v > n->v)
      return c;
    c = n;
  }
  return NULL;
}

#define N(x) (x->n)

#define meat(n,x,y,z) asm (n : : "r"(x), "r"(y), "r"(z))

void abs_find_val (node c)
{
  while (c) {
    meat("# find_val", c,c,c);
    c = (c+1);
  }
}

void abs_check_arr (node c)
{
  while (c) {
    meat("# check_arr", c,(c+1),c);
    c = (c+1);
  }
}

void abs_check_list (node c)
{
  while (c) {
    node o = c, n = c->n;
    meat("# check_list", c,n,o);
    c = n;
  }
}

void abs_find_prev (node c)
{
  while (c) {
    node o = c;
    c = c->n;
    meat("# find_prev", c,c,o);
  }
}

void abs_all (node c)
{
  abs_find_val (c);
  abs_check_arr (c);
  abs_check_list (c);
  abs_find_prev (c);
}
