[Mesa-dev] i965: overwriting parts of a register and optimization passes

Iago Toral itoral at igalia.com
Tue Jul 8 02:19:38 PDT 2014


Hi,

I have some code that first initializes a register and then overwrites a 
specific subregister. However, after the optimization passes in 
brw_vec4.cpp the initialization instruction goes away. I see that live 
intervals are computed for the destination register without considering 
if we are writing only to a specific subregister, so I guess that is the 
reason for this behaviour, but this strikes me as odd, as it defeats the 
purpose of overwriting only specific subregs, so I guess there is 
something else that I am missing.

This an example of what is happening:

mov(8)          g6<1>.xUD       g0<4,4,1>UD                     { 
align16 WE_all 1Q };
mov(1)          g6.2<1>UD       0x00000007UD                    { align1 
  WE_all compacted };

The first MOV is removed from the instruction set when I put the second 
MOV, however the second MOV should only be writing to subreg 6.2 and 
keep the rest of register 6 intact, or at least that is what I am trying 
to do...

Can someone explain what is wrong with those two instructions? how 
should I overwrite only a specific subregister without causing this 
behavior?

Thanks,
Iago


More information about the mesa-dev mailing list