intel/fs: Skip registers faster when setting spill costs
This might be slightly faster since we're doing one read rather than
two before we decide to skip. The more important reason, however, is
because no_spill prevents us from re-spilling spill registers. In the
new world in which we don't re-calculate liveness every spill, we may
not have valid liveness for spill registers so we shouldn't even look
their live ranges up.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110825
Fixes: e99081e76d
"intel/fs/ra: Spill without destroying the..."
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Tested-by: Tapani Pälli <tapani.palli@intel.com>
This commit is contained in:
@@ -922,6 +922,15 @@ fs_reg_alloc::set_spill_costs()
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (unsigned i = 0; i < fs->alloc.count; i++) {
|
for (unsigned i = 0; i < fs->alloc.count; i++) {
|
||||||
|
/* Do the no_spill check first. Registers that are used as spill
|
||||||
|
* temporaries may have been allocated after we calculated liveness so
|
||||||
|
* we shouldn't look their liveness up. Fortunately, they're always
|
||||||
|
* used in SCRATCH_READ/WRITE instructions so they'll always be flagged
|
||||||
|
* no_spill.
|
||||||
|
*/
|
||||||
|
if (no_spill[i])
|
||||||
|
continue;
|
||||||
|
|
||||||
int live_length = fs->virtual_grf_end[i] - fs->virtual_grf_start[i];
|
int live_length = fs->virtual_grf_end[i] - fs->virtual_grf_start[i];
|
||||||
if (live_length <= 0)
|
if (live_length <= 0)
|
||||||
continue;
|
continue;
|
||||||
@@ -934,8 +943,7 @@ fs_reg_alloc::set_spill_costs()
|
|||||||
* to spill medium length registers with more uses.
|
* to spill medium length registers with more uses.
|
||||||
*/
|
*/
|
||||||
float adjusted_cost = spill_costs[i] / logf(live_length);
|
float adjusted_cost = spill_costs[i] / logf(live_length);
|
||||||
if (!no_spill[i])
|
ra_set_node_spill_cost(g, first_vgrf_node + i, adjusted_cost);
|
||||||
ra_set_node_spill_cost(g, first_vgrf_node + i, adjusted_cost);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
have_spill_costs = true;
|
have_spill_costs = true;
|
||||||
|
Reference in New Issue
Block a user