> The engine only knew how to propagate cases that always make the same > set of vdef/vuses, so it was safe to only tell it to use the first > vdef. > > /* Note that for propagation purposes, we are only interested in > visiting statements that load the exact same memory reference > stored here. Those statements will have the exact same list > of virtual uses, so it is enough to set the output of this > statement to be its first virtual definition. */ > > > You are changing this, AFAIK, so you will need to make it handle > multiple output values. >
That's indeed the problem: Consider the following stmt that is been visited - # MPT.1416_722 = VDEF <MPT.1416_734> { MPT.1416 } D.61410.first = i0_62; Than output_p will be set to MPT.1416_722 (which is the only vdef of this stmt) - *output_p = first_vdef (stmt); And later on (in add_ssa_edge () function) all the uses of MPT.1416_722 will be added to the working set which in our case is D.61410.second = 97; statement instead of the real uses of D.61410.first. # MPT.1416_723 = VDEF <MPT.1416_722> { MPT.1416 } D.61410.second = 97; Is there a way to retrieve the real uses of D.61410.first? Thanks again, Revital