mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-24 21:28:10 +02:00
brw: Pass VGRF numbers to liveness helpers
Compute var_from_reg() once in setup_def_use() and pass the variable number to setup_one_read() and setup_one_write(). This lets the loops walk consecutive variable numbers directly instead of mutating a brw_reg offset. Also: setup_one_write() is only called for VGRFs, so remove the check for VGRF there. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41496>
This commit is contained in:
parent
9975a35f43
commit
3f71aab327
2 changed files with 14 additions and 24 deletions
|
|
@ -503,9 +503,8 @@ public:
|
|||
|
||||
protected:
|
||||
void setup_def_use();
|
||||
void setup_one_read(struct block_data *bd, int ip, const brw_reg ®);
|
||||
void setup_one_write(struct block_data *bd, brw_inst *inst, int ip,
|
||||
const brw_reg ®);
|
||||
void setup_one_read(struct block_data *bd, int ip, int var);
|
||||
void setup_one_write(struct block_data *bd, brw_inst *inst, int ip, int var);
|
||||
void compute_live_variables();
|
||||
void compute_start_end();
|
||||
|
||||
|
|
|
|||
|
|
@ -30,9 +30,8 @@
|
|||
|
||||
void
|
||||
brw_live_variables::setup_one_read(struct block_data *bd,
|
||||
int ip, const brw_reg ®)
|
||||
int ip, int var)
|
||||
{
|
||||
int var = var_from_reg(reg);
|
||||
assert(var < num_vars);
|
||||
|
||||
vars_range[var] = merge(vars_range[var], ip);
|
||||
|
|
@ -47,9 +46,8 @@ brw_live_variables::setup_one_read(struct block_data *bd,
|
|||
|
||||
void
|
||||
brw_live_variables::setup_one_write(struct block_data *bd, brw_inst *inst,
|
||||
int ip, const brw_reg ®)
|
||||
int ip, int var)
|
||||
{
|
||||
int var = var_from_reg(reg);
|
||||
assert(var < num_vars);
|
||||
|
||||
vars_range[var] = merge(vars_range[var], ip);
|
||||
|
|
@ -57,12 +55,10 @@ brw_live_variables::setup_one_write(struct block_data *bd, brw_inst *inst,
|
|||
/* The def[] bitset marks when an initialization in a block completely
|
||||
* screens off previous updates of that variable (VGRF channel).
|
||||
*/
|
||||
if (inst->dst.file == VGRF) {
|
||||
if (!inst->is_partial_write() && !BITSET_TEST(bd->use, var))
|
||||
BITSET_SET(bd->def, var);
|
||||
if (!inst->is_partial_write() && !BITSET_TEST(bd->use, var))
|
||||
BITSET_SET(bd->def, var);
|
||||
|
||||
BITSET_SET(bd->defout, var);
|
||||
}
|
||||
BITSET_SET(bd->defout, var);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -89,26 +85,21 @@ brw_live_variables::setup_def_use()
|
|||
foreach_inst_in_block(brw_inst, inst, block) {
|
||||
/* Set use[] for this instruction */
|
||||
for (unsigned int i = 0; i < inst->sources; i++) {
|
||||
brw_reg reg = inst->src[i];
|
||||
|
||||
if (reg.file != VGRF)
|
||||
if (inst->src[i].file != VGRF)
|
||||
continue;
|
||||
|
||||
for (unsigned j = 0; j < regs_read(devinfo, inst, i); j++) {
|
||||
setup_one_read(bd, ip, reg);
|
||||
reg.offset += REG_SIZE;
|
||||
}
|
||||
const int var = var_from_reg(inst->src[i]);
|
||||
for (unsigned j = 0; j < regs_read(devinfo, inst, i); j++)
|
||||
setup_one_read(bd, ip, var + j);
|
||||
}
|
||||
|
||||
bd->flag_use[0] |= inst->flags_read(devinfo) & ~bd->flag_def[0];
|
||||
|
||||
/* Set def[] for this instruction */
|
||||
if (inst->dst.file == VGRF) {
|
||||
brw_reg reg = inst->dst;
|
||||
for (unsigned j = 0; j < regs_written(inst); j++) {
|
||||
setup_one_write(bd, inst, ip, reg);
|
||||
reg.offset += REG_SIZE;
|
||||
}
|
||||
const int var = var_from_reg(inst->dst);
|
||||
for (unsigned j = 0; j < regs_written(inst); j++)
|
||||
setup_one_write(bd, inst, ip, var + j);
|
||||
}
|
||||
|
||||
if (!inst->predicate && inst->exec_size >= 8)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue