mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
vc4: Fix register pressure cost estimates when a src appears twice.
This ended up confusing the scheduler for things like fabs (implemented as fmaxabs x, x) or squaring a number, and it would try to avoid scheduling them because it appeared more expensive than other instructions. Fixes failure to register allocate in dEQP-GLES2.functional.uniform_api.random.3 with almost no shader-db effects (+.35% max temps)
This commit is contained in:
parent
0fca01d027
commit
615f6653b0
1 changed files with 13 additions and 3 deletions
|
|
@ -434,10 +434,20 @@ get_register_pressure_cost(struct schedule_state *state, struct qinst *inst)
|
|||
cost--;
|
||||
|
||||
for (int i = 0; i < qir_get_nsrc(inst); i++) {
|
||||
if (inst->src[i].file == QFILE_TEMP &&
|
||||
!BITSET_TEST(state->temp_live, inst->src[i].index)) {
|
||||
cost++;
|
||||
if (inst->src[i].file != QFILE_TEMP ||
|
||||
BITSET_TEST(state->temp_live, inst->src[i].index)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
bool already_counted = false;
|
||||
for (int j = 0; j < i; j++) {
|
||||
if (inst->src[i].file == inst->src[j].file &&
|
||||
inst->src[i].index == inst->src[j].index) {
|
||||
already_counted = true;
|
||||
}
|
||||
}
|
||||
if (!already_counted)
|
||||
cost++;
|
||||
}
|
||||
|
||||
return cost;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue