[Mesa-dev] [PATCH 14/16] i965: Compute the number of live registers at each IP.
Matt Turner
mattst88 at gmail.com
Thu Dec 19 13:40:28 PST 2013
From: Kenneth Graunke <kenneth at whitecape.org>
Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
---
src/mesa/drivers/dri/i965/brw_fs.cpp | 18 ++++++++++++++++++
src/mesa/drivers/dri/i965/brw_fs.h | 3 +++
src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 1 +
3 files changed, 22 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index 12b6d4a..2c7b3ae 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -3219,6 +3219,24 @@ fs_visitor::assign_binding_table_offsets()
assign_common_binding_table_offsets(next_binding_table_offset);
}
+void
+fs_visitor::calculate_register_pressure()
+{
+ calculate_live_intervals();
+
+ int num_instructions = 0;
+ foreach_list(node, &this->instructions) {
+ ++num_instructions;
+ }
+
+ regs_live_at_ip = rzalloc_array(mem_ctx, int, num_instructions);
+
+ for (int reg = 0; reg < virtual_grf_count; reg++) {
+ for (int ip = virtual_grf_start[reg]; ip <= virtual_grf_end[reg]; ip++)
+ regs_live_at_ip[ip] += virtual_grf_sizes[reg];
+ }
+}
+
bool
fs_visitor::run()
{
diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h
index 07360ae..bee8cdf 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.h
+++ b/src/mesa/drivers/dri/i965/brw_fs.h
@@ -309,6 +309,7 @@ public:
void setup_pull_constants();
void invalidate_live_intervals();
void calculate_live_intervals();
+ void calculate_register_pressure();
bool opt_algebraic();
bool opt_cse();
bool opt_cse_local(bblock_t *block, exec_list *aeb);
@@ -447,6 +448,8 @@ public:
int *virtual_grf_end;
brw::fs_live_variables *live_intervals;
+ int *regs_live_at_ip;
+
/* This is the map from UNIFORM hw_reg + reg_offset as generated by
* the visitor to the packed uniform number after
* remove_dead_constants() that represents the actual uploaded
diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
index 869b636..c5bacc2 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp
@@ -2933,6 +2933,7 @@ fs_visitor::fs_visitor(struct brw_context *brw,
this->virtual_grf_start = NULL;
this->virtual_grf_end = NULL;
this->live_intervals = NULL;
+ this->regs_live_at_ip = NULL;
this->params_remap = NULL;
this->nr_params_remap = 0;
--
1.8.3.2
More information about the mesa-dev
mailing list