diff options
author | Kenneth Graunke <[email protected]> | 2012-10-25 02:29:15 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2012-10-25 14:52:54 -0700 |
commit | 03ea156f1b3e57ef223c0340afb49e513fa0b407 (patch) | |
tree | 274fed64b3880fc6eadfa567391e29f26094d507 /src/mesa/drivers | |
parent | 10ff6772c8054aea12ac0f08e2e3898fd4a7f76b (diff) |
i965/vs: Preserve the type when copy propagating into an instruction.
Consider the following code, which reinterprets a register as a
different type:
mov(8) g6<1>F g1.4<0,4,1>.xF
and(8) g5<1>.xUD g6<4,4,1>.xUD 0x7fffffffUD
Copy propagation would notice that we can replace the use of g6 with
g1.4 and eliminate the MOV. Unfortunately, it failed to preserve the UD
type, incorrectly generating:
and(8) g5<1>.xUD g6<4,4,1>.xF 0x7fffffffUD
Found while debugging Ian's uncommitted ARB_vertex_program LOG opcode
test with my new Mesa IR -> Vec4 IR translator.
NOTE: This is a candidate for stable release branches.
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp index 4d27c53ddf3..ca757c3c900 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp @@ -224,6 +224,7 @@ try_copy_propagation(struct intel_context *intel, if (value.equals(&inst->src[arg])) return false; + value.type = inst->src[arg].type; inst->src[arg] = value; return true; } |