summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2014-09-03 23:52:26 -0700
committerKenneth Graunke <kenneth@whitecape.org>2014-09-05 09:52:50 -0700
commit248eaff63d9a5484df1105a0c484d20e086f5f83 (patch)
treed51d3e4997bd4e5030c4aef89718e9e8ad521c66
parent6ff5bb24658c55c28e462c657816fda2d8e53a65 (diff)
i965/fs: Pass block to insert and remove functions missed earlier.
Otherwise, the basic block start/end IPs don't get updated properly, leading to a broken CFG. This usually results in the following assertion failure: brw_fs_live_variables.cpp:141: void brw::fs_live_variables::setup_def_use(): Assertion `ip == block->start_ip' failed. Fixes KWin, WebGL demos, and a score of Piglit tests on Sandybridge and earlier hardware. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
index ab11a79dfa1..23a8f2ff80d 100644
--- a/src/mesa/drivers/dri/i965/brw_fs.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
@@ -2151,7 +2151,7 @@ fs_visitor::compute_to_mrf()
calculate_live_intervals();
- foreach_in_list_safe(fs_inst, inst, &instructions) {
+ foreach_block_and_inst_safe(block, fs_inst, inst, cfg) {
int ip = next_ip;
next_ip++;
@@ -2229,7 +2229,7 @@ fs_visitor::compute_to_mrf()
scan_inst->dst.file = MRF;
scan_inst->dst.reg = inst->dst.reg;
scan_inst->saturate |= inst->saturate;
- inst->remove();
+ inst->remove(block);
progress = true;
}
break;
@@ -2342,7 +2342,7 @@ fs_visitor::try_rep_send()
* destination registers in our block of MOVs.
*/
count = 0;
- foreach_in_list_safe(fs_inst, inst, &this->instructions) {
+ foreach_block_and_inst_safe(block, fs_inst, inst, cfg) {
if (count == 0)
start = inst;
if (inst->opcode == BRW_OPCODE_MOV &&
@@ -2381,9 +2381,9 @@ fs_visitor::try_rep_send()
mov->dst.type = BRW_REGISTER_TYPE_F;
/* Replace the four MOVs with the new vec4 MOV. */
- start->insert_before(mov);
+ start->insert_before(block, mov);
for (i = 0; i < 4; i++)
- mov->next->remove();
+ ((fs_inst *) mov->next)->remove(block);
/* Finally, adjust the message length and set the opcode to
* REP_FB_WRITE for the send, so that the generator will use the
@@ -3147,14 +3147,14 @@ fs_visitor::opt_drop_redundant_mov_to_flags()
{
bool flag_mov_found[2] = {false};
- foreach_in_list_safe(fs_inst, inst, &instructions) {
+ foreach_block_and_inst_safe(block, fs_inst, inst, cfg) {
if (inst->is_control_flow()) {
memset(flag_mov_found, 0, sizeof(flag_mov_found));
} else if (inst->opcode == FS_OPCODE_MOV_DISPATCH_TO_FLAGS) {
if (!flag_mov_found[inst->flag_subreg])
flag_mov_found[inst->flag_subreg] = true;
else
- inst->remove();
+ inst->remove(block);
} else if (inst->writes_flag()) {
flag_mov_found[inst->flag_subreg] = false;
}