aco/ra: cleanup compact_relocate_vars fallback path
We don't need to duplicate these loops. Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34343>
This commit is contained in:
@@ -1889,23 +1889,29 @@ get_reg(ra_ctx& ctx, const RegisterFile& reg_file, Temp temp,
|
||||
const PhysRegInterval regs = get_reg_bounds(ctx, info.rc);
|
||||
|
||||
unsigned def_size = info.rc.size();
|
||||
std::vector<IDAndRegClass> def_vars;
|
||||
for (Definition def : instr->definitions) {
|
||||
if (def.isPrecolored()) {
|
||||
assert(!regs.contains({def.physReg(), def.size()}));
|
||||
continue;
|
||||
}
|
||||
if (ctx.assignments[def.tempId()].assigned && def.regClass().type() == info.rc.type())
|
||||
if (ctx.assignments[def.tempId()].assigned && def.regClass().type() == info.rc.type()) {
|
||||
def_size += def.regClass().size();
|
||||
def_vars.emplace_back(def.tempId(), def.regClass());
|
||||
}
|
||||
}
|
||||
|
||||
unsigned killed_op_size = 0;
|
||||
std::vector<IDAndRegClass> killed_op_vars;
|
||||
for (Operand op : instr->operands) {
|
||||
if (op.isPrecolored()) {
|
||||
assert(!regs.contains({op.physReg(), op.size()}));
|
||||
continue;
|
||||
}
|
||||
if (op.isTemp() && op.isFirstKillBeforeDef() && op.regClass().type() == info.rc.type())
|
||||
if (op.isTemp() && op.isFirstKillBeforeDef() && op.regClass().type() == info.rc.type()) {
|
||||
killed_op_size += op.regClass().size();
|
||||
killed_op_vars.emplace_back(op.tempId(), op.regClass());
|
||||
}
|
||||
}
|
||||
|
||||
/* reallocate passthrough variables and non-killed operands */
|
||||
@@ -1917,21 +1923,9 @@ get_reg(ra_ctx& ctx, const RegisterFile& reg_file, Temp temp,
|
||||
PhysReg space = compact_relocate_vars(ctx, vars, parallelcopies, regs.lo());
|
||||
|
||||
/* reallocate killed operands */
|
||||
std::vector<IDAndRegClass> killed_op_vars;
|
||||
for (Operand op : instr->operands) {
|
||||
if (!op.isPrecolored() && op.isFirstKillBeforeDef() &&
|
||||
op.regClass().type() == info.rc.type())
|
||||
killed_op_vars.emplace_back(op.tempId(), op.regClass());
|
||||
}
|
||||
compact_relocate_vars(ctx, killed_op_vars, parallelcopies, space);
|
||||
|
||||
/* reallocate definitions */
|
||||
std::vector<IDAndRegClass> def_vars;
|
||||
for (Definition def : instr->definitions) {
|
||||
if (!def.isPrecolored() && ctx.assignments[def.tempId()].assigned &&
|
||||
def.regClass().type() == info.rc.type())
|
||||
def_vars.emplace_back(def.tempId(), def.regClass());
|
||||
}
|
||||
def_vars.emplace_back(0xffffffff, info.rc);
|
||||
return compact_relocate_vars(ctx, def_vars, parallelcopies, space);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user