mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
ra: Use a bitset for storing which registers belong to a class.
This should use 1/8 the memory. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Brian Paul <brianp@vmware.com> Reviewed-by: Christoph Brill <egore911@gmail.com>
This commit is contained in:
parent
8d856c3937
commit
da1cce2d68
1 changed files with 10 additions and 5 deletions
|
|
@ -99,7 +99,12 @@ struct ra_regs {
|
|||
};
|
||||
|
||||
struct ra_class {
|
||||
bool *regs;
|
||||
/**
|
||||
* Bitset indicating which registers belong to this class.
|
||||
*
|
||||
* (If bit N is set, then register N belongs to this class.)
|
||||
*/
|
||||
BITSET_WORD *regs;
|
||||
|
||||
/**
|
||||
* p(B) in Runeson/Nyström paper.
|
||||
|
|
@ -269,7 +274,7 @@ ra_alloc_reg_class(struct ra_regs *regs)
|
|||
class = rzalloc(regs, struct ra_class);
|
||||
regs->classes[regs->class_count] = class;
|
||||
|
||||
class->regs = rzalloc_array(class, bool, regs->count);
|
||||
class->regs = rzalloc_array(class, BITSET_WORD, BITSET_WORDS(regs->count));
|
||||
|
||||
return regs->class_count++;
|
||||
}
|
||||
|
|
@ -279,7 +284,7 @@ ra_class_add_reg(struct ra_regs *regs, unsigned int c, unsigned int r)
|
|||
{
|
||||
struct ra_class *class = regs->classes[c];
|
||||
|
||||
class->regs[r] = true;
|
||||
BITSET_SET(class->regs, r);
|
||||
class->p++;
|
||||
}
|
||||
|
||||
|
|
@ -289,7 +294,7 @@ ra_class_add_reg(struct ra_regs *regs, unsigned int c, unsigned int r)
|
|||
static bool
|
||||
reg_belongs_to_class(unsigned int r, struct ra_class *c)
|
||||
{
|
||||
return c->regs[r];
|
||||
return BITSET_TEST(c->regs, r);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -333,7 +338,7 @@ ra_set_finalize(struct ra_regs *regs, unsigned int **q_values)
|
|||
|
||||
for (i = 0; i < regs->regs[rc].num_conflicts; i++) {
|
||||
unsigned int rb = regs->regs[rc].conflict_list[i];
|
||||
if (regs->classes[b]->regs[rb])
|
||||
if (BITSET_TEST(regs->classes[b]->regs, rb))
|
||||
conflicts++;
|
||||
}
|
||||
max_conflicts = MAX2(max_conflicts, conflicts);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue