Browse Source

[965] Avoid emitting dead code for DPx/math instructions.

The pass1 optimization stage clears out writemasks and registers, but the
instructions themselves are still being processed at this stage, and could
have resulted in them still being emitted.
tags/mesa_7_1_rc1
Michal Wajdeczko 17 years ago
parent
commit
c60b5dfde8
1 changed files with 15 additions and 0 deletions
  1. 15
    0
      src/mesa/drivers/dri/i965/brw_wm_emit.c

+ 15
- 0
src/mesa/drivers/dri/i965/brw_wm_emit.c View File

@@ -504,6 +504,9 @@ static void emit_dp3( struct brw_compile *p,
const struct brw_reg *arg0,
const struct brw_reg *arg1 )
{
if (!(mask & WRITEMASK_XYZW))
return; /* Do not emit dead code*/

assert((mask & WRITEMASK_XYZW) == WRITEMASK_X);

brw_MUL(p, brw_null_reg(), arg0[0], arg1[0]);
@@ -521,6 +524,9 @@ static void emit_dp4( struct brw_compile *p,
const struct brw_reg *arg0,
const struct brw_reg *arg1 )
{
if (!(mask & WRITEMASK_XYZW))
return; /* Do not emit dead code*/

assert((mask & WRITEMASK_XYZW) == WRITEMASK_X);

brw_MUL(p, brw_null_reg(), arg0[0], arg1[0]);
@@ -539,6 +545,9 @@ static void emit_dph( struct brw_compile *p,
const struct brw_reg *arg0,
const struct brw_reg *arg1 )
{
if (!(mask & WRITEMASK_XYZW))
return; /* Do not emit dead code*/

assert((mask & WRITEMASK_XYZW) == WRITEMASK_X);

brw_MUL(p, brw_null_reg(), arg0[0], arg1[0]);
@@ -582,6 +591,9 @@ static void emit_math1( struct brw_compile *p,
GLuint mask,
const struct brw_reg *arg0 )
{
if (!(mask & WRITEMASK_XYZW))
return; /* Do not emit dead code*/

//assert((mask & WRITEMASK_XYZW) == WRITEMASK_X ||
// function == BRW_MATH_FUNCTION_SINCOS);
@@ -606,6 +618,9 @@ static void emit_math2( struct brw_compile *p,
const struct brw_reg *arg0,
const struct brw_reg *arg1)
{
if (!(mask & WRITEMASK_XYZW))
return; /* Do not emit dead code*/

assert((mask & WRITEMASK_XYZW) == WRITEMASK_X);

brw_push_insn_state(p);

Loading…
Cancel
Save