i915g: Fix peephole optimization for MOVs.
authorStéphane Marchesin <marcheu@chromium.org>
Thu, 22 Sep 2011 19:43:24 +0000 (12:43 -0700)
committerStéphane Marchesin <marcheu@chromium.org>
Thu, 22 Sep 2011 19:43:24 +0000 (12:43 -0700)
src/gallium/drivers/i915/i915_fpc_optimize.c

index 50b3a28573ce449cba2e334ca4f88a3b12f9159f..0d680fbf87639c8a4bb5a42a342b3e02253cfc75 100644 (file)
@@ -62,6 +62,13 @@ static boolean same_src_reg(struct i915_full_src_register* d1, struct i915_full_
            d1->Register.Negate == d2->Register.Negate);
 }
 
+static boolean has_destination(unsigned opcode)
+{
+   return (opcode != TGSI_OPCODE_NOP &&
+           opcode != TGSI_OPCODE_KIL &&
+           opcode != TGSI_OPCODE_RET);
+}
+
 static boolean is_unswizzled(struct i915_full_src_register* r,
                              unsigned write_mask)
 {
@@ -192,6 +199,7 @@ static void i915_fpc_optimize_useless_mov(union i915_full_token* current, union
    if ( current->Token.Type == TGSI_TOKEN_TYPE_INSTRUCTION  &&
         next->Token.Type == TGSI_TOKEN_TYPE_INSTRUCTION  &&
         next->FullInstruction.Instruction.Opcode == TGSI_OPCODE_MOV &&
+        has_destination(current->FullInstruction.Instruction.Opcode) &&
         next->FullInstruction.Instruction.Saturate == TGSI_SAT_NONE &&
         next->FullInstruction.Src[0].Register.Absolute == 0 &&
         next->FullInstruction.Src[0].Register.Negate == 0 &&