Viewing file: 20080519-1.c (1.19 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
extern void abort (void);
typedef unsigned long HARD_REG_SET[2]; HARD_REG_SET reg_class_contents[2];
struct du_chain { struct du_chain *next_use; int cl; };
void __attribute__((noinline)) merge_overlapping_regs (HARD_REG_SET *p) { if ((*p)[0] != -1 || (*p)[1] != -1) abort (); }
void __attribute__((noinline)) regrename_optimize (struct du_chain *this) { HARD_REG_SET this_unavailable; unsigned long *scan_fp_; int n_uses; struct du_chain *last;
this_unavailable[0] = 0; this_unavailable[1] = 0;
n_uses = 0; for (last = this; last->next_use; last = last->next_use) { scan_fp_ = reg_class_contents[last->cl]; n_uses++; this_unavailable[0] |= ~ scan_fp_[0]; this_unavailable[1] |= ~ scan_fp_[1]; } if (n_uses < 1) return;
scan_fp_ = reg_class_contents[last->cl]; this_unavailable[0] |= ~ scan_fp_[0]; this_unavailable[1] |= ~ scan_fp_[1];
merge_overlapping_regs (&this_unavailable); }
int main() { struct du_chain du1 = { 0, 0 }; struct du_chain du0 = { &du1, 1 }; reg_class_contents[0][0] = -1; reg_class_contents[0][1] = -1; reg_class_contents[1][0] = 0; reg_class_contents[1][1] = 0; regrename_optimize (&du0); return 0; }
|