Mesa (main): aco/ra: only use VCC if program->needs_vcc == true
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Apr 13 22:16:00 UTC 2022
Module: Mesa
Branch: main
Commit: 44fb9ba84ac1048bd045b147546a2731962ea458
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=44fb9ba84ac1048bd045b147546a2731962ea458
Author: Daniel Schürmann <daniel at schuermann.dev>
Date: Wed Mar 16 10:59:52 2022 +0100
aco/ra: only use VCC if program->needs_vcc == true
A future commit will make VCC register assignment independent
from register hints. Up to GFX9, VCC can alternatively be used
as regular SGPR, so prevent overlap.
Reviewed-by: Rhys Perry <pendingchaos02 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15408>
---
src/amd/compiler/aco_live_var_analysis.cpp | 2 +-
src/amd/compiler/aco_register_allocation.cpp | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/amd/compiler/aco_live_var_analysis.cpp b/src/amd/compiler/aco_live_var_analysis.cpp
index 48456fc0df8..abe839642af 100644
--- a/src/amd/compiler/aco_live_var_analysis.cpp
+++ b/src/amd/compiler/aco_live_var_analysis.cpp
@@ -421,7 +421,7 @@ live_var_analysis(Program* program)
std::vector<PhiInfo> phi_info(program->blocks.size());
RegisterDemand new_demand;
- program->needs_vcc = false;
+ program->needs_vcc = program->chip_class >= GFX10;
/* this implementation assumes that the block idx corresponds to the block's position in
* program->blocks vector */
diff --git a/src/amd/compiler/aco_register_allocation.cpp b/src/amd/compiler/aco_register_allocation.cpp
index 41c36603608..0204f934bb3 100644
--- a/src/amd/compiler/aco_register_allocation.cpp
+++ b/src/amd/compiler/aco_register_allocation.cpp
@@ -1398,7 +1398,7 @@ get_reg_specified(ra_ctx& ctx, RegisterFile& reg_file, RegClass rc, aco_ptr<Inst
PhysRegInterval bounds = get_reg_bounds(ctx.program, rc.type());
PhysRegInterval vcc_win = {vcc, 2};
/* VCC is outside the bounds */
- bool is_vcc = rc.type() == RegType::sgpr && vcc_win.contains(reg_win);
+ bool is_vcc = rc.type() == RegType::sgpr && vcc_win.contains(reg_win) && ctx.program->needs_vcc;
bool is_m0 = rc == s1 && reg == m0;
if (!bounds.contains(reg_win) && !is_vcc && !is_m0)
return false;
More information about the mesa-commit
mailing list