2008-05-30 Vladimir Makarov <vmakarov@redhat.com>
[official-gcc.git] / gcc / testsuite / gcc.c-torture / execute / 20080519-1.c
blob303c4e65f637d85ee962fd53898c43c86938a4a2
1 extern void abort (void);
3 typedef unsigned long HARD_REG_SET[2];
4 HARD_REG_SET reg_class_contents[2];
6 struct du_chain
8 struct du_chain *next_use;
9 int cl;
12 void __attribute__((noinline))
13 merge_overlapping_regs (HARD_REG_SET *p)
15 if ((*p)[0] != -1 || (*p)[1] != -1)
16 abort ();
19 void __attribute__((noinline))
20 regrename_optimize (struct du_chain *this)
22 HARD_REG_SET this_unavailable;
23 unsigned long *scan_fp_;
24 int n_uses;
25 struct du_chain *last;
27 this_unavailable[0] = 0;
28 this_unavailable[1] = 0;
30 n_uses = 0;
31 for (last = this; last->next_use; last = last->next_use)
33 scan_fp_ = reg_class_contents[last->cl];
34 n_uses++;
35 this_unavailable[0] |= ~ scan_fp_[0];
36 this_unavailable[1] |= ~ scan_fp_[1];
38 if (n_uses < 1)
39 return;
41 scan_fp_ = reg_class_contents[last->cl];
42 this_unavailable[0] |= ~ scan_fp_[0];
43 this_unavailable[1] |= ~ scan_fp_[1];
45 merge_overlapping_regs (&this_unavailable);
48 int main()
50 struct du_chain du1 = { 0, 0 };
51 struct du_chain du0 = { &du1, 1 };
52 reg_class_contents[0][0] = -1;
53 reg_class_contents[0][1] = -1;
54 reg_class_contents[1][0] = 0;
55 reg_class_contents[1][1] = 0;
56 regrename_optimize (&du0);
57 return 0;