1  /* { dg-do compile { target ia32 } } */
       2  /* { dg-require-effective-target nonpic } */
       3  /* { dg-options "-O2" } */
       4  
       5  typedef void *ira_loop_tree_node_t;
       6  
       7  extern int end (int);
       8  extern int doo (int);
       9  
      10  void
      11  ira_traverse_loop_tree (int bb_p, ira_loop_tree_node_t loop_node,
      12                          void (*preorder_func) (ira_loop_tree_node_t),
      13                          void (*postorder_func) (ira_loop_tree_node_t))
      14  {
      15    int l, r = 0x1, h = 0, j = 0;
      16  
      17    if (preorder_func)
      18      (*preorder_func) (loop_node);
      19  
      20    if (bb_p)
      21      {
      22        for (l = 0; l < end (l); l++)
      23          {
      24            r += doo (l);
      25            h += (l + 1) * 3;
      26            h %= (l + 1);
      27            r -= doo (h);
      28            j += (l + 1) * 7;
      29            j %= (l + 1);
      30            r += doo (j);
      31          }
      32      }
      33  
      34    if (postorder_func)
      35      (*postorder_func) (loop_node);
      36  }
      37  /* { dg-final { scan-assembler "jmp\[ \t\]*.%eax" } } */