From 10da96887c785930c2553b2d5bde91e52b8b034a Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Mon, 21 Sep 2015 13:58:19 -0700 Subject: [PATCH] i965/vec4: Detect and delete useless MOVs. With NIR: instructions in affected programs: 111508 -> 109193 (-2.08%) helped: 507 Without NIR: instructions in affected programs: 28763 -> 28474 (-1.00%) helped: 186 Reviewed-by: Jason Ekstrand Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/brw_vec4.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp index ed49cd38987..6e52d79e053 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp @@ -1021,6 +1021,28 @@ vec4_visitor::opt_register_coalesce() inst->src[0].abs || inst->src[0].negate || inst->src[0].reladdr) continue; + /* Remove no-op MOVs */ + if (inst->dst.file == inst->src[0].file && + inst->dst.reg == inst->src[0].reg && + inst->dst.reg_offset == inst->src[0].reg_offset) { + bool is_nop_mov = true; + + for (unsigned c = 0; c < 4; c++) { + if ((inst->dst.writemask & (1 << c)) == 0) + continue; + + if (BRW_GET_SWZ(inst->src[0].swizzle, c) != c) { + is_nop_mov = false; + break; + } + } + + if (is_nop_mov) { + inst->remove(block); + continue; + } + } + bool to_mrf = (inst->dst.file == MRF); /* Can't coalesce this GRF if someone else was going to -- 2.30.2