From b7da198274e58ecf8d6eb1ff5323ae365946ba8c Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Sun, 24 Dec 2023 12:45:45 -0400 Subject: [PATCH] agx: trust in agx_index size validated. Signed-off-by: Alyssa Rosenzweig Part-of: --- src/asahi/compiler/agx_insert_waits.c | 9 +++++---- src/asahi/compiler/agx_pressure_schedule.c | 4 ++-- src/asahi/compiler/agx_register_allocate.c | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/asahi/compiler/agx_insert_waits.c b/src/asahi/compiler/agx_insert_waits.c index d715f07ea0a..51f5dd167a6 100644 --- a/src/asahi/compiler/agx_insert_waits.c +++ b/src/asahi/compiler/agx_insert_waits.c @@ -63,7 +63,7 @@ agx_insert_waits_local(agx_context *ctx, agx_block *block) if (I->src[s].type != AGX_INDEX_REGISTER) continue; - unsigned nr_read = agx_read_registers(I, s); + unsigned nr_read = agx_index_size_16(I->src[s]); for (unsigned slot = 0; slot < ARRAY_SIZE(slots); ++slot) { if (BITSET_TEST_RANGE(slots[slot].writes, I->src[s].value, I->src[s].value + nr_read - 1)) @@ -76,7 +76,7 @@ agx_insert_waits_local(agx_context *ctx, agx_block *block) if (I->dest[d].type != AGX_INDEX_REGISTER) continue; - unsigned nr_writes = agx_write_registers(I, d); + unsigned nr_writes = agx_index_size_16(I->dest[d]); for (unsigned slot = 0; slot < ARRAY_SIZE(slots); ++slot) { if (BITSET_TEST_RANGE(slots[slot].writes, I->dest[d].value, I->dest[d].value + nr_writes - 1)) @@ -125,8 +125,9 @@ agx_insert_waits_local(agx_context *ctx, agx_block *block) continue; assert(I->dest[d].type == AGX_INDEX_REGISTER); - BITSET_SET_RANGE(slots[I->scoreboard].writes, I->dest[d].value, - I->dest[d].value + agx_write_registers(I, d) - 1); + BITSET_SET_RANGE( + slots[I->scoreboard].writes, I->dest[d].value, + I->dest[d].value + agx_index_size_16(I->dest[d]) - 1); } slots[I->scoreboard].nr_pending++; diff --git a/src/asahi/compiler/agx_pressure_schedule.c b/src/asahi/compiler/agx_pressure_schedule.c index 9dd940f8e8d..443bddcc9bb 100644 --- a/src/asahi/compiler/agx_pressure_schedule.c +++ b/src/asahi/compiler/agx_pressure_schedule.c @@ -128,7 +128,7 @@ calculate_pressure_delta(agx_instr *I, BITSET_WORD *live) /* Destinations must be unique */ agx_foreach_ssa_dest(I, d) { if (BITSET_TEST(live, I->dest[d].value)) - delta -= agx_write_registers(I, d); + delta -= agx_index_size_16(I->dest[d]); } agx_foreach_ssa_src(I, src) { @@ -143,7 +143,7 @@ calculate_pressure_delta(agx_instr *I, BITSET_WORD *live) } if (!dupe && !BITSET_TEST(live, I->src[src].value)) - delta += agx_read_registers(I, src); + delta += agx_index_size_16(I->src[src]); } return delta; diff --git a/src/asahi/compiler/agx_register_allocate.c b/src/asahi/compiler/agx_register_allocate.c index 393e81f225a..ef626719aac 100644 --- a/src/asahi/compiler/agx_register_allocate.c +++ b/src/asahi/compiler/agx_register_allocate.c @@ -1127,7 +1127,7 @@ agx_ra(agx_context *ctx) unsigned v = I->dest[d].value; assert(ncomps[v] == 0 && "broken SSA"); /* Round up vectors for easier live range splitting */ - ncomps[v] = util_next_power_of_two(agx_write_registers(I, d)); + ncomps[v] = util_next_power_of_two(agx_index_size_16(I->dest[d])); sizes[v] = I->dest[d].size; max_ncomps = MAX2(max_ncomps, ncomps[v]);