mesa: Add a convenience interface for register allocator conflicts setup.

This commit is contained in:
Eric Anholt 2011-05-04 13:27:33 -07:00
parent e6c64800cc
commit fa43477fa3
2 changed files with 23 additions and 0 deletions

View File

@ -200,6 +200,27 @@ ra_add_reg_conflict(struct ra_regs *regs, unsigned int r1, unsigned int r2)
}
}
/**
* Adds a conflict between base_reg and reg, and also between reg and
* anything that base_reg conflicts with.
*
* This can simplify code for setting up multiple register classes
* which are aggregates of some base hardware registers, compared to
* explicitly using ra_add_reg_conflict.
*/
void
ra_add_transitive_reg_conflict(struct ra_regs *regs,
unsigned int base_reg, unsigned int reg)
{
int i;
ra_add_reg_conflict(regs, reg, base_reg);
for (i = 0; i < regs->regs[base_reg].num_conflicts; i++) {
ra_add_reg_conflict(regs, reg, regs->regs[base_reg].conflict_list[i]);
}
}
unsigned int
ra_alloc_reg_class(struct ra_regs *regs)
{

View File

@ -40,6 +40,8 @@ struct ra_regs *ra_alloc_reg_set(unsigned int count);
unsigned int ra_alloc_reg_class(struct ra_regs *regs);
void ra_add_reg_conflict(struct ra_regs *regs,
unsigned int r1, unsigned int r2);
void ra_add_transitive_reg_conflict(struct ra_regs *regs,
unsigned int base_reg, unsigned int reg);
void ra_class_add_reg(struct ra_regs *regs, unsigned int c, unsigned int reg);
void ra_set_finalize(struct ra_regs *regs);
/** @} */