i965: Don't emit saturates for instructions without destinations.
authorMatt Turner <mattst88@gmail.com>
Tue, 10 Feb 2015 06:21:21 +0000 (22:21 -0800)
committerMatt Turner <mattst88@gmail.com>
Fri, 20 Feb 2015 05:16:43 +0000 (21:16 -0800)
We were special casing OPCODE_END but no other instructions that have no
destination, like OPCODE_KIL, leading us to emitting MOVs with null
destinations.

total instructions in shared programs: 5705243 -> 5701539 (-0.06%)
instructions in affected programs:     124104 -> 120400 (-2.98%)
helped:                                904

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/drivers/dri/i965/brw_fs_fp.cpp
src/mesa/drivers/dri/i965/brw_vec4_vp.cpp

index 382a54aec475d0ecea37bbfe6c1460a9bb85c18e..d22de0e514554a8d007198fa9f6fd81ae4fd458a 100644 (file)
@@ -522,7 +522,7 @@ fs_visitor::emit_fragment_program_code()
       /* To handle saturates, we emit a MOV with a saturate bit, which
        * optimization should fold into the preceding instructions when safe.
        */
-      if (fpi->Opcode != OPCODE_END) {
+      if (_mesa_num_inst_dst_regs(fpi->Opcode) != 0) {
          fs_reg real_dst = get_fp_dst_reg(&fpi->DstReg);
 
          for (int i = 0; i < 4; i++) {
index 60a0f24154a3b237de18368b27f880bdacb69ba9..a5a5e7bfd5bfa357f913d36bfa28e989b57d10b4 100644 (file)
@@ -386,7 +386,7 @@ vec4_vs_visitor::emit_program_code()
       }
 
       /* Copy the temporary back into the actual destination register. */
-      if (vpi->Opcode != OPCODE_END) {
+      if (_mesa_num_inst_dst_regs(vpi->Opcode) != 0) {
          emit(MOV(get_vp_dst_reg(vpi->DstReg), src_reg(dst)));
       }
    }