mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 18:18:06 +02:00
util/ra: Add a function for making all conflicts on a register transitive
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
7c8e53f1be
commit
9b49284c22
2 changed files with 24 additions and 0 deletions
|
|
@ -266,6 +266,29 @@ ra_add_transitive_reg_conflict(struct ra_regs *regs,
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes every conflict on the given register transitive. In other words,
|
||||
* every register that conflicts with r will now conflict with every other
|
||||
* register conflicting with r.
|
||||
*
|
||||
* 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_make_reg_conflicts_transitive(struct ra_regs *regs, unsigned int r)
|
||||
{
|
||||
struct ra_reg *reg = ®s->regs[r];
|
||||
BITSET_WORD tmp;
|
||||
int c;
|
||||
|
||||
BITSET_FOREACH_SET(c, tmp, reg->conflicts, regs->count) {
|
||||
struct ra_reg *other = ®s->regs[c];
|
||||
for (unsigned i = 0; i < BITSET_WORDS(regs->count); i++)
|
||||
other->conflicts[i] |= reg->conflicts[i];
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int
|
||||
ra_alloc_reg_class(struct ra_regs *regs)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ 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_make_reg_conflicts_transitive(struct ra_regs *regs, unsigned int reg);
|
||||
void ra_class_add_reg(struct ra_regs *regs, unsigned int c, unsigned int reg);
|
||||
void ra_set_num_conflicts(struct ra_regs *regs, unsigned int class_a,
|
||||
unsigned int class_b, unsigned int num_conflicts);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue