--- This change obsoletes "[PATCH 26/32] i965/vec4: Don't assume a value is dead when its VGRF is only partially overwritten." [1]. With per-subregister liveness information we can now fix it properly.
[1] http://lists.freedesktop.org/archives/mesa-dev/2015-February/076109.html .../dri/i965/brw_vec4_dead_code_eliminate.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp b/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp index e4ce496..980e266 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_dead_code_eliminate.cpp @@ -80,8 +80,10 @@ vec4_visitor::dead_code_eliminate() if (inst->dst.file == GRF && !inst->has_side_effects()) { bool result_live[4] = { false }; - for (int c = 0; c < 4; c++) { - result_live[c] = BITSET_TEST(live, var_from_reg(alloc, inst->dst, c)); + for (unsigned i = 0; i < inst->regs_written; i++) { + for (int c = 0; c < 4; c++) + result_live[c] |= BITSET_TEST( + live, var_from_reg(alloc, offset(inst->dst, i), c)); } /* If the instruction can't do writemasking, then it's all or @@ -122,9 +124,12 @@ vec4_visitor::dead_code_eliminate() } if (inst->dst.file == GRF && !inst->predicate) { - for (int c = 0; c < 4; c++) { - if (inst->dst.writemask & (1 << c)) { - BITSET_CLEAR(live, var_from_reg(alloc, inst->dst, c)); + for (unsigned i = 0; i < inst->regs_written; i++) { + for (int c = 0; c < 4; c++) { + if (inst->dst.writemask & (1 << c)) { + BITSET_CLEAR(live, var_from_reg(alloc, + offset(inst->dst, i), c)); + } } } } @@ -135,8 +140,11 @@ vec4_visitor::dead_code_eliminate() for (int i = 0; i < 3; i++) { if (inst->src[i].file == GRF) { - for (int c = 0; c < 4; c++) { - BITSET_SET(live, var_from_reg(alloc, inst->src[i], c)); + for (unsigned j = 0; j < inst->regs_read(i); j++) { + for (int c = 0; c < 4; c++) { + BITSET_SET(live, var_from_reg(alloc, + offset(inst->src[i], j), c)); + } } } } -- 2.1.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev