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 <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user