This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Help in understanding ccp propagator


On 6/12/07, Revital1 Eres <ERES@il.ibm.com> wrote:

> 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?

No, you will have to look at each immediate use and determine if it is really a store to the same place.


Thanks again, Revital




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]