aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2016-12-14 17:56:35 -0800
committerKenneth Graunke <[email protected]>2017-01-17 21:45:00 -0800
commit90bf39cd2b39874557a7c492d92b85945d45f3c6 (patch)
treeee4fdb5efaecd6c9059ed6222d08e4ec01af0cc5 /src
parentbe5f53e769deb936509efd6f0576b15b7a5432b9 (diff)
i965: Combine some dead code elimination NOP'ing code.
In theory we might have incorrectly NOP'd instructions that write the flag, but where that flag value isn't used, and yet the instruction either writes the accumulator or has side effects. I don't believe any such instructions exist, so this is mostly a code cleanup. Curro pointed out that FS_OPCODE_FB_WRITE has a null destination and actually writes the flag on Gen4-5 to dynamically decide whether to write some payload data. The hunk removed in this patch might have NOP'd it, except that we don't actually mark flags_written() in the IR, so it doesn't think the flag is touched at all. That's sketchy, but it means it wouldn't hit this today (though there are likely other problems!). v2: Properly replace the inst->regs_written() check in the second hunk with the flag being live (mistake caught by Curro). Signed-off-by: Kenneth Graunke <[email protected]> Reviewed-by: Francisco Jerez <[email protected]> Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp9
1 files changed, 1 insertions, 8 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp b/src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp
index 04901a97e40..0dd609121ca 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_dead_code_eliminate.cpp
@@ -70,17 +70,10 @@ fs_visitor::dead_code_eliminate()
}
}
- if (inst->dst.is_null() && inst->flags_written()) {
- if (!(flag_live[0] & inst->flags_written())) {
- inst->opcode = BRW_OPCODE_NOP;
- progress = true;
- }
- }
-
if (inst->dst.is_null() &&
!inst->is_control_flow() &&
!inst->has_side_effects() &&
- !inst->flags_written() &&
+ !(flag_live[0] & inst->flags_written()) &&
!inst->writes_accumulator) {
inst->opcode = BRW_OPCODE_NOP;
progress = true;