From a84de3fb7c1198f7cbd3b20a4231c14a7010f97f Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Mon, 3 Jun 2019 17:09:12 -0500 Subject: [PATCH] intel/fs: Skip registers faster when setting spill costs MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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: e99081e76d4 "intel/fs/ra: Spill without destroying the..." Reviewed-by: Caio Marcelo de Oliveira Filho Tested-by: Tapani Pälli --- src/intel/compiler/brw_fs_reg_allocate.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/intel/compiler/brw_fs_reg_allocate.cpp b/src/intel/compiler/brw_fs_reg_allocate.cpp index 33631ddcd0c..6a594a4f520 100644 --- a/src/intel/compiler/brw_fs_reg_allocate.cpp +++ b/src/intel/compiler/brw_fs_reg_allocate.cpp @@ -922,6 +922,15 @@ fs_reg_alloc::set_spill_costs() } 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]; if (live_length <= 0) continue; @@ -934,8 +943,7 @@ fs_reg_alloc::set_spill_costs() * to spill medium length registers with more uses. */ 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; -- 2.30.2