freedreno/ir3/ra: add helper to map name to array

For vreg names that refer to arrays rather than SSA values, this is the
counterpart to name_to_instr().

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4272>
This commit is contained in:
Rob Clark 2020-03-21 11:25:36 -07:00 committed by Marge Bot
parent d99d358389
commit 0e7d24b532

View file

@ -105,6 +105,9 @@
static struct ir3_instruction * name_to_instr(struct ir3_ra_ctx *ctx, unsigned name);
static bool name_is_array(struct ir3_ra_ctx *ctx, unsigned name);
static struct ir3_array * name_to_array(struct ir3_ra_ctx *ctx, unsigned name);
/* does it conflict? */
static inline bool
intersects(unsigned a_start, unsigned a_end, unsigned b_start, unsigned b_end)
@ -500,10 +503,30 @@ ra_init(struct ir3_ra_ctx *ctx)
static struct ir3_instruction *
name_to_instr(struct ir3_ra_ctx *ctx, unsigned name)
{
assert(!name_is_array(ctx, name));
struct hash_entry *entry = _mesa_hash_table_search(ctx->name_to_instr, &name);
if (entry)
return entry->data;
unreachable("invalid name");
unreachable("invalid instr name");
return NULL;
}
static bool
name_is_array(struct ir3_ra_ctx *ctx, unsigned name)
{
return name >= ctx->class_base[total_class_count];
}
static struct ir3_array *
name_to_array(struct ir3_ra_ctx *ctx, unsigned name)
{
assert(name_is_array(ctx, name));
foreach_array (arr, &ctx->ir->array_list) {
unsigned sz = reg_size_for_array(arr);
if (name < (arr->base + sz))
return arr;
}
unreachable("invalid array name");
return NULL;
}