Commit 03ea156f authored by Kenneth Graunke's avatar Kenneth Graunke
Browse files

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's avatarKenneth Graunke <>
Reviewed-by: Emma Anholt's avatarEric Anholt <>
parent 10ff6772
......@@ -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;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment