summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2014-08-24 19:38:21 -0700
committerMatt Turner <mattst88@gmail.com>2014-09-24 09:42:46 -0700
commit269b6e24d6ec61d8d8d0c5d1b3d1bfa4f4a55f5f (patch)
tree60593488f3c4db9fa4307341c897f2a7497369aa /src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp
parentb0b64c85e4a0dafbb46405e4b3c17be24b63347f (diff)
downloadexternal_mesa3d-269b6e24d6ec61d8d8d0c5d1b3d1bfa4f4a55f5f.zip
external_mesa3d-269b6e24d6ec61d8d8d0c5d1b3d1bfa4f4a55f5f.tar.gz
external_mesa3d-269b6e24d6ec61d8d8d0c5d1b3d1bfa4f4a55f5f.tar.bz2
i965/vec4: Preserve CFG in spill_reg().
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp')
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp b/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp
index 29feec0..15779b7 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_reg_allocate.cpp
@@ -28,6 +28,7 @@ extern "C" {
#include "brw_vec4.h"
#include "brw_vs.h"
+#include "brw_cfg.h"
using namespace brw;
@@ -326,8 +327,10 @@ vec4_visitor::spill_reg(int spill_reg_nr)
assert(virtual_grf_sizes[spill_reg_nr] == 1);
unsigned int spill_offset = c->last_scratch++;
+ calculate_cfg();
+
/* Generate spill/unspill instructions for the objects being spilled. */
- foreach_in_list(vec4_instruction, inst, &instructions) {
+ foreach_block_and_inst(block, vec4_instruction, inst, cfg) {
for (unsigned int i = 0; i < 3; i++) {
if (inst->src[i].file == GRF && inst->src[i].reg == spill_reg_nr) {
src_reg spill_reg = inst->src[i];
@@ -342,16 +345,16 @@ vec4_visitor::spill_reg(int spill_reg_nr)
temp.writemask |= (1 << BRW_GET_SWZ(inst->src[i].swizzle, c));
assert(temp.writemask != 0);
- emit_scratch_read(inst, temp, spill_reg, spill_offset);
+ emit_scratch_read(block, inst, temp, spill_reg, spill_offset);
}
}
if (inst->dst.file == GRF && inst->dst.reg == spill_reg_nr) {
- emit_scratch_write(inst, spill_offset);
+ emit_scratch_write(block, inst, spill_offset);
}
}
- invalidate_live_intervals();
+ invalidate_live_intervals(false);
}
} /* namespace brw */