1/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
2/* { dg-options "-O2 -fselective-scheduling -fmodulo-sched" } */
3
4enum rtx_code
5{
6  INSN, ADDR_VEC, ADDR_DIFF_VEC, CALL_INSN, CODE_LABEL, BARRIER, NOTE
7};
8typedef union rtunion_def
9{
10  int rtint;
11  char *rtstr;
12  struct rtx_def *rtx;
13  struct rtvec_def *rtvec;
14}
15rtunion;
16typedef struct rtx_def
17{
18  unsigned short code;
19  rtunion fld[1];
20}
21 *rtx;
22typedef struct rtvec_def
23{
24  unsigned num_elem;
25  rtunion elem[1];
26}
27 *rtvec;
28extern rtx emit_barrier (void);
29extern rtx emit_note (char *);
30
31static void
32copy_loop_body (rtx *map)
33{
34  int i;
35  rtx insn, copy;
36  rtx pat = copy->fld[3].rtx;
37
38  switch (insn->code)
39    {
40    case INSN:
41      if (insn->fld[7].rtx)
42	{
43	}
44      else if (pat->code == ADDR_VEC || pat->code == ADDR_DIFF_VEC)
45	{
46	  int diff_vec_p = pat->code == ADDR_DIFF_VEC;
47	  int len = pat->fld[diff_vec_p].rtvec->num_elem;
48	  for (i = 0; i < len; i++)
49	    pat->fld[diff_vec_p].rtvec->elem[i].rtx->fld[5].rtint++;
50	}
51    case CALL_INSN:
52      for (i = 0; i < 64; i++)
53	map[i] = 0;
54    case CODE_LABEL:
55    case BARRIER:
56      copy = emit_barrier ();
57    case NOTE:
58      copy = emit_note ("x");
59    }
60}
61void
62unroll_loop (int insn_count, rtx *map)
63{
64  if (insn_count > 50)
65    copy_loop_body (map);
66}
67
68