summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Turner <[email protected]>2014-10-29 13:27:37 -0700
committerMatt Turner <[email protected]>2014-12-01 16:42:13 -0800
commita50915984fe1205a3479cc8a5d07a8b3bde7d6bc (patch)
tree46ec2007cde165a2c06060a6384137a0e2cdb147
parente4d0299089fe3ea0a91abb3ec34c5c0436ef9e68 (diff)
i965/vec4: Make live_intervals part of the vec4_visitor class.
Like in fs_visitor. Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4.h5
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp15
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp2
3 files changed, 11 insertions, 11 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h
index abdab993be9..6924775314a 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4.h
+++ b/src/mesa/drivers/dri/i965/brw_vec4.h
@@ -87,6 +87,8 @@ namespace brw {
class dst_reg;
+class vec4_live_variables;
+
unsigned
swizzle_for_size(int size);
@@ -301,6 +303,7 @@ public:
unsigned int max_grf;
int *virtual_grf_start;
int *virtual_grf_end;
+ brw::vec4_live_variables *live_intervals;
dst_reg userplane[MAX_CLIP_PLANES];
/**
@@ -311,8 +314,6 @@ public:
/** Per-virtual-grf indices into an array of size virtual_grf_reg_count */
int *virtual_grf_reg_map;
- bool live_intervals_valid;
-
dst_reg *variable_storage(ir_variable *var);
void reladdr_to_temp(ir_instruction *ir, src_reg *reg, int *num_reladdr);
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp b/src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp
index 80b912a343b..44eed1ca658 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_live_variables.cpp
@@ -195,7 +195,7 @@ vec4_live_variables::~vec4_live_variables()
void
vec4_visitor::calculate_live_intervals()
{
- if (this->live_intervals_valid)
+ if (this->live_intervals)
return;
int *start = ralloc_array(mem_ctx, int, this->virtual_grf_count * 4);
@@ -247,29 +247,28 @@ vec4_visitor::calculate_live_intervals()
* The control flow-aware analysis was done at a channel level, while at
* this point we're distilling it down to vgrfs.
*/
- vec4_live_variables livevars(this, cfg);
+ this->live_intervals = new(mem_ctx) vec4_live_variables(this, cfg);
foreach_block (block, cfg) {
- for (int i = 0; i < livevars.num_vars; i++) {
- if (BITSET_TEST(livevars.bd[block->num].livein, i)) {
+ for (int i = 0; i < live_intervals->num_vars; i++) {
+ if (BITSET_TEST(live_intervals->bd[block->num].livein, i)) {
start[i] = MIN2(start[i], block->start_ip);
end[i] = MAX2(end[i], block->start_ip);
}
- if (BITSET_TEST(livevars.bd[block->num].liveout, i)) {
+ if (BITSET_TEST(live_intervals->bd[block->num].liveout, i)) {
start[i] = MIN2(start[i], block->end_ip);
end[i] = MAX2(end[i], block->end_ip);
}
}
}
-
- this->live_intervals_valid = true;
}
void
vec4_visitor::invalidate_live_intervals()
{
- live_intervals_valid = false;
+ ralloc_free(live_intervals);
+ live_intervals = NULL;
}
bool
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
index c1c24ac0b49..417dcb15e29 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
@@ -3571,7 +3571,7 @@ vec4_visitor::vec4_visitor(struct brw_context *brw,
this->virtual_grf_reg_map = NULL;
this->virtual_grf_reg_count = 0;
this->virtual_grf_array_size = 0;
- this->live_intervals_valid = false;
+ this->live_intervals = NULL;
this->max_grf = brw->gen >= 7 ? GEN7_MRF_HACK_START : BRW_MAX_GRF;