[PATCH vkd3d 1/3] vkd3d-shader/hlsl: Handle branches in copy propagation.

Zebediah Figura (she/her) zfigura at codeweavers.com
Wed Dec 22 11:46:48 CST 2021


On 12/20/21 02:51, Giovanni Mascellani wrote:
> Hi,
> 
> On 17/12/21 18:59, Zebediah Figura (she/her) wrote:
>>> A new var_def is now initialized to the content of the same var_def
>>> in earlier stack frames.
>>
>> I'm not a big fan of this, because now it feels like it's half one 
>> thing and half the other.
> 
> Neither I like it (my preferred solution is still my original proposal), 
> but it was necessary to fix Matteo's changes, which hopefully you don't 
> like either (since you found they are buggy). For the pars construens, 
> which solution would you prefer now? Matteo, which alternative do you 
> prefer?
> 
>> Something that just occurred to me: could we handle this by instead 
>> just comparing the var_def structures from the parent and child state, 
>> and invalidating where they don't match?
>>
>> Alternatively, probably simpler: could we just recursively invalidate 
>> parents in copy_propagation_record_store()?
> 
> I guess we could.
> 
> I don't like it because it makes it harder for me to convince myself 
> that there is a proof of the correctness of the algorithm, and we have 
> just seen that when it is harder to prove the correctness of an 
> algorithm it is also easier that there are actual bugs; and on the other 
> hand I see no points in favor in doing the changes (except perhaps for, 
> in the case of the recursive var_def search, vague speculations about 
> the fact that it might be a little faster.
> 
> Do you think that changing this would make it easier for you to check 
> that the code is correct? Which other advantages do you see for the 
> change your are proposing?

I'll admit, I still am inclined to prefer not duplicating variable 
state, and I don't share your concern about code correctness, even 
though we've been bitten once already.

I suppose in that case the solution would be to store some extra bit of 
state along with the hlsl_ir_node pointer, say "bool written;".



More information about the wine-devel mailing list